diff options
Diffstat (limited to 'ui/views/view.cc')
-rw-r--r-- | ui/views/view.cc | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/ui/views/view.cc b/ui/views/view.cc index 78659ca..c79cc6c 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc @@ -748,7 +748,8 @@ void View::Paint(const ui::PaintContext& parent_context) { ui::PaintContext context = parent_context.CloneWithPaintOffset(offset_to_parent); - if (context.CanCheckInvalidated()) { + bool is_invalidated = true; + if (context.CanCheckInvalid()) { #if DCHECK_IS_ON() gfx::Vector2d offset; context.Visited(this); @@ -770,10 +771,12 @@ void View::Paint(const ui::PaintContext& parent_context) { // If the View wasn't invalidated, don't waste time painting it, the output // would be culled. - if (!context.IsRectInvalidated(GetLocalBounds())) - return; + is_invalidated = context.IsRectInvalid(GetLocalBounds()); } + if (!is_invalidated && context.ShouldEarlyOutOfPaintingWhenValid()) + return; + TRACE_EVENT1("views", "View::Paint", "class", GetClassName()); // If the view is backed by a layer, it should paint with itself as the origin @@ -803,8 +806,8 @@ void View::Paint(const ui::PaintContext& parent_context) { clip_transform_recorder->Transform(transform_from_parent); } - { - ui::PaintRecorder recorder(context); + if (is_invalidated || !paint_cache_.UseCache(context)) { + ui::PaintRecorder recorder(context, &paint_cache_); gfx::Canvas* canvas = recorder.canvas(); gfx::ScopedCanvas scoped_canvas(canvas); |