| Index: cc/resources/picture_pile_impl.cc
|
| diff --git a/cc/resources/picture_pile_impl.cc b/cc/resources/picture_pile_impl.cc
|
| index 7ec925212731938dfe0741999e244628226adc0d..741653854c2a83d20a2c7ce64b6037c8be9f0270 100644
|
| --- a/cc/resources/picture_pile_impl.cc
|
| +++ b/cc/resources/picture_pile_impl.cc
|
| @@ -14,6 +14,16 @@
|
| #include "third_party/skia/include/core/SkPictureRecorder.h"
|
| #include "ui/gfx/geometry/rect_conversions.h"
|
|
|
| +namespace {
|
| +
|
| +#ifdef NDEBUG
|
| +const bool kDefaultClearCanvasSetting = false;
|
| +#else
|
| +const bool kDefaultClearCanvasSetting = true;
|
| +#endif
|
| +
|
| +} // namespace
|
| +
|
| namespace cc {
|
|
|
| scoped_refptr<PicturePileImpl> PicturePileImpl::Create() {
|
| @@ -27,13 +37,11 @@ scoped_refptr<PicturePileImpl> PicturePileImpl::CreateFromPicturePile(
|
|
|
| PicturePileImpl::PicturePileImpl()
|
| : background_color_(SK_ColorTRANSPARENT),
|
| - contents_opaque_(false),
|
| - contents_fill_bounds_completely_(false),
|
| + requires_clear_(true),
|
| is_solid_color_(false),
|
| solid_color_(SK_ColorTRANSPARENT),
|
| has_any_recordings_(false),
|
| - is_mask_(false),
|
| - clear_canvas_with_debug_color_(false),
|
| + clear_canvas_with_debug_color_(kDefaultClearCanvasSetting),
|
| min_contents_scale_(0.f),
|
| slow_down_raster_scale_factor_for_debug_(0),
|
| should_attempt_to_use_distance_field_text_(false) {
|
| @@ -42,15 +50,13 @@ PicturePileImpl::PicturePileImpl()
|
| PicturePileImpl::PicturePileImpl(const PicturePile* other)
|
| : picture_map_(other->picture_map_),
|
| tiling_(other->tiling_),
|
| - background_color_(other->background_color_),
|
| - contents_opaque_(other->contents_opaque_),
|
| - contents_fill_bounds_completely_(other->contents_fill_bounds_completely_),
|
| + background_color_(SK_ColorTRANSPARENT),
|
| + requires_clear_(true),
|
| is_solid_color_(other->is_solid_color_),
|
| solid_color_(other->solid_color_),
|
| recorded_viewport_(other->recorded_viewport_),
|
| has_any_recordings_(other->has_any_recordings_),
|
| - is_mask_(other->is_mask_),
|
| - clear_canvas_with_debug_color_(other->clear_canvas_with_debug_color_),
|
| + clear_canvas_with_debug_color_(kDefaultClearCanvasSetting),
|
| min_contents_scale_(other->min_contents_scale_),
|
| slow_down_raster_scale_factor_for_debug_(
|
| other->slow_down_raster_scale_factor_for_debug_),
|
| @@ -88,7 +94,12 @@ void PicturePileImpl::PlaybackToCanvas(SkCanvas* canvas,
|
| // If this picture has opaque contents, it is guaranteeing that it will
|
| // draw an opaque rect the size of the layer. If it is not, then we must
|
| // clear this canvas ourselves.
|
| - if (contents_opaque_ || contents_fill_bounds_completely_) {
|
| + if (requires_clear_) {
|
| + TRACE_EVENT_INSTANT0("cc", "SkCanvas::clear", TRACE_EVENT_SCOPE_THREAD);
|
| + // Clearing is about ~4x faster than drawing a rect even if the content
|
| + // isn't covering a majority of the canvas.
|
| + canvas->clear(SK_ColorTRANSPARENT);
|
| + } else {
|
| // Even if completely covered, for rasterizations that touch the edge of the
|
| // layer, we also need to raster the background color underneath the last
|
| // texel (since the recording won't cover it) and outside the last texel
|
| @@ -129,11 +140,6 @@ void PicturePileImpl::PlaybackToCanvas(SkCanvas* canvas,
|
| canvas->drawColor(background_color_, SkXfermode::kSrc_Mode);
|
| canvas->restore();
|
| }
|
| - } else {
|
| - TRACE_EVENT_INSTANT0("cc", "SkCanvas::clear", TRACE_EVENT_SCOPE_THREAD);
|
| - // Clearing is about ~4x faster than drawing a rect even if the content
|
| - // isn't covering a majority of the canvas.
|
| - canvas->clear(SK_ColorTRANSPARENT);
|
| }
|
|
|
| RasterCommon(canvas,
|
| @@ -401,6 +407,14 @@ void PicturePileImpl::SetShouldAttemptToUseDistanceFieldText() {
|
| should_attempt_to_use_distance_field_text_ = true;
|
| }
|
|
|
| +void PicturePileImpl::SetBackgoundColor(SkColor background_color) {
|
| + background_color_ = background_color;
|
| +}
|
| +
|
| +void PicturePileImpl::SetRequiresClear(bool requires_clear) {
|
| + requires_clear_ = requires_clear;
|
| +}
|
| +
|
| bool PicturePileImpl::ShouldAttemptToUseDistanceFieldText() const {
|
| return should_attempt_to_use_distance_field_text_;
|
| }
|
| @@ -423,10 +437,6 @@ void PicturePileImpl::AsValueInto(base::debug::TracedValue* pictures) const {
|
| }
|
| }
|
|
|
| -bool PicturePileImpl::IsMask() const {
|
| - return is_mask_;
|
| -}
|
| -
|
| PicturePileImpl::PixelRefIterator::PixelRefIterator(
|
| const gfx::Rect& content_rect,
|
| float contents_scale,
|
|
|