Skip to content

Commit

Permalink
Pipe ClipPathDisplayItem down to CC
Browse files Browse the repository at this point in the history
CC-side of ClipPath before I flip the switch in Blink with
https://codereview.chromium.org/851363002.

Review URL: https://codereview.chromium.org/855573002

Cr-Commit-Position: refs/heads/master@{#311975}
  • Loading branch information
leviw authored and Commit bot committed Jan 16, 2015
1 parent 4a4f415 commit f978535
Show file tree
Hide file tree
Showing 6 changed files with 148 additions and 0 deletions.
2 changes: 2 additions & 0 deletions cc/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,8 @@ component("cc") {
"resources/bitmap_skpicture_content_layer_updater.h",
"resources/clip_display_item.cc",
"resources/clip_display_item.h",
"resources/clip_path_display_item.cc",
"resources/clip_path_display_item.h",
"resources/content_layer_updater.cc",
"resources/content_layer_updater.h",
"resources/display_item.cc",
Expand Down
12 changes: 12 additions & 0 deletions cc/blink/web_display_item_list_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include "cc/blink/web_blend_mode.h"
#include "cc/resources/clip_display_item.h"
#include "cc/resources/clip_path_display_item.h"
#include "cc/resources/drawing_display_item.h"
#include "cc/resources/filter_display_item.h"
#include "cc/resources/float_clip_display_item.h"
Expand Down Expand Up @@ -53,6 +54,17 @@ void WebDisplayItemListImpl::appendEndClipItem() {
display_item_list_->AppendItem(cc::EndClipDisplayItem::Create());
}

void WebDisplayItemListImpl::appendClipPathItem(const SkPath& clip_path,
SkRegion::Op clip_op,
bool antialias) {
display_item_list_->AppendItem(
cc::ClipPathDisplayItem::Create(clip_path, clip_op, antialias));
}

void WebDisplayItemListImpl::appendEndClipPathItem() {
display_item_list_->AppendItem(cc::EndClipPathDisplayItem::Create());
}

void WebDisplayItemListImpl::appendFloatClipItem(
const blink::WebFloatRect& clip_rect) {
display_item_list_->AppendItem(cc::FloatClipDisplayItem::Create(clip_rect));
Expand Down
6 changes: 6 additions & 0 deletions cc/blink/web_display_item_list_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
#include "third_party/WebKit/public/platform/WebDisplayItemList.h"
#include "third_party/WebKit/public/platform/WebFloatPoint.h"
#include "third_party/WebKit/public/platform/WebVector.h"
#include "third_party/skia/include/core/SkRegion.h"

class SkImageFilter;
class SkMatrix44;
class SkPath;
class SkPicture;
class SkRRect;

Expand All @@ -35,6 +37,10 @@ class WebDisplayItemListImpl : public blink::WebDisplayItemList {
const blink::WebRect& clip_rect,
const blink::WebVector<SkRRect>& rounded_clip_rects);
virtual void appendEndClipItem();
virtual void appendClipPathItem(const SkPath& clip_path,
SkRegion::Op clip_op,
bool antialias);
virtual void appendEndClipPathItem();
virtual void appendFloatClipItem(const blink::WebFloatRect& clip_rect);
virtual void appendEndFloatClipItem();
virtual void appendTransformItem(const SkMatrix44& matrix);
Expand Down
2 changes: 2 additions & 0 deletions cc/cc.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,8 @@
'resources/bitmap_skpicture_content_layer_updater.h',
'resources/clip_display_item.cc',
'resources/clip_display_item.h',
'resources/clip_path_display_item.cc',
'resources/clip_path_display_item.h',
'resources/content_layer_updater.cc',
'resources/content_layer_updater.h',
'resources/display_item.cc',
Expand Down
62 changes: 62 additions & 0 deletions cc/resources/clip_path_display_item.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cc/resources/clip_path_display_item.h"

#include "third_party/skia/include/core/SkCanvas.h"

namespace cc {

ClipPathDisplayItem::ClipPathDisplayItem(const SkPath& clip_path,
SkRegion::Op clip_op,
bool antialias)
: clip_path_(clip_path), clip_op_(clip_op), antialias_(antialias) {
}

ClipPathDisplayItem::~ClipPathDisplayItem() {
}

void ClipPathDisplayItem::Raster(SkCanvas* canvas,
SkDrawPictureCallback* callback) const {
canvas->save();
canvas->clipPath(clip_path_, clip_op_, antialias_);
}

bool ClipPathDisplayItem::IsSuitableForGpuRasterization() const {
return true;
}

int ClipPathDisplayItem::ApproximateOpCount() const {
return 1;
}

size_t ClipPathDisplayItem::PictureMemoryUsage() const {
size_t total_size = sizeof(SkPath) + sizeof(SkRegion::Op) + sizeof(bool);
return total_size;
}

EndClipPathDisplayItem::EndClipPathDisplayItem() {
}

EndClipPathDisplayItem::~EndClipPathDisplayItem() {
}

void EndClipPathDisplayItem::Raster(SkCanvas* canvas,
SkDrawPictureCallback* callback) const {
canvas->restore();
}

bool EndClipPathDisplayItem::IsSuitableForGpuRasterization() const {
return true;
}

int EndClipPathDisplayItem::ApproximateOpCount() const {
return 0;
}

size_t EndClipPathDisplayItem::PictureMemoryUsage() const {
return 0;
}

} // namespace cc
64 changes: 64 additions & 0 deletions cc/resources/clip_path_display_item.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_RESOURCES_CLIP_PATH_DISPLAY_ITEM_H_
#define CC_RESOURCES_CLIP_PATH_DISPLAY_ITEM_H_

#include "base/memory/scoped_ptr.h"
#include "cc/base/cc_export.h"
#include "cc/resources/display_item.h"
#include "third_party/skia/include/core/SkPath.h"
#include "third_party/skia/include/core/SkRegion.h"

class SkCanvas;
class SkDrawPictureCallback;

namespace cc {

class CC_EXPORT ClipPathDisplayItem : public DisplayItem {
public:
~ClipPathDisplayItem() override;

static scoped_ptr<ClipPathDisplayItem> Create(const SkPath& path,
SkRegion::Op clip_op,
bool antialias) {
return make_scoped_ptr(new ClipPathDisplayItem(path, clip_op, antialias));
}

void Raster(SkCanvas* canvas, SkDrawPictureCallback* callback) const override;

bool IsSuitableForGpuRasterization() const override;
int ApproximateOpCount() const override;
size_t PictureMemoryUsage() const override;

protected:
ClipPathDisplayItem(const SkPath& path, SkRegion::Op clip_op, bool antialias);

private:
SkPath clip_path_;
SkRegion::Op clip_op_;
bool antialias_;
};

class CC_EXPORT EndClipPathDisplayItem : public DisplayItem {
public:
~EndClipPathDisplayItem() override;

static scoped_ptr<EndClipPathDisplayItem> Create() {
return make_scoped_ptr(new EndClipPathDisplayItem());
}

void Raster(SkCanvas* canvas, SkDrawPictureCallback* callback) const override;

bool IsSuitableForGpuRasterization() const override;
int ApproximateOpCount() const override;
size_t PictureMemoryUsage() const override;

protected:
EndClipPathDisplayItem();
};

} // namespace cc

#endif // CC_RESOURCES_CLIP_PATH_DISPLAY_ITEM_H_

0 comments on commit f978535

Please sign in to comment.