summaryrefslogtreecommitdiffstats
path: root/ui/views/view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/views/view.cc')
-rw-r--r--ui/views/view.cc13
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);