1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CC_LAYERS_PICTURE_LAYER_H_
6 #define CC_LAYERS_PICTURE_LAYER_H_
8 #include "cc/base/invalidation_region.h"
9 #include "cc/debug/devtools_instrumentation.h"
10 #include "cc/debug/micro_benchmark_controller.h"
11 #include "cc/layers/layer.h"
12 #include "cc/trees/occlusion_tracker.h"
16 class ContentLayerClient
;
17 class RecordingSource
;
18 class ResourceUpdateQueue
;
20 class CC_EXPORT PictureLayer
: public Layer
{
22 static scoped_refptr
<PictureLayer
> Create(ContentLayerClient
* client
);
26 void SetNearestNeighbor(bool nearest_neighbor
);
29 scoped_ptr
<LayerImpl
> CreateLayerImpl(LayerTreeImpl
* tree_impl
) override
;
30 void SetLayerTreeHost(LayerTreeHost
* host
) override
;
31 void PushPropertiesTo(LayerImpl
* layer
) override
;
32 void SetNeedsDisplayRect(const gfx::Rect
& layer_rect
) override
;
33 bool Update(ResourceUpdateQueue
* queue
,
34 const OcclusionTracker
<Layer
>* occlusion
) override
;
35 void SetIsMask(bool is_mask
) override
;
36 bool SupportsLCDText() const override
;
37 skia::RefPtr
<SkPicture
> GetPicture() const override
;
38 bool IsSuitableForGpuRasterization() const override
;
40 void RunMicroBenchmark(MicroBenchmark
* benchmark
) override
;
42 ContentLayerClient
* client() { return client_
; }
44 RecordingSource
* GetRecordingSourceForTesting() {
45 return recording_source_
.get();
49 explicit PictureLayer(ContentLayerClient
* client
);
50 // Allow tests to inject a recording source.
51 PictureLayer(ContentLayerClient
* client
, scoped_ptr
<RecordingSource
> source
);
52 ~PictureLayer() override
;
54 bool HasDrawableContent() const override
;
56 bool is_mask() const { return is_mask_
; }
59 bool UpdateCanUseLCDText();
61 ContentLayerClient
* client_
;
62 scoped_ptr
<RecordingSource
> recording_source_
;
63 devtools_instrumentation::
64 ScopedLayerObjectTracker instrumentation_object_tracker_
;
65 // Invalidation to use the next time update is called.
66 InvalidationRegion pending_invalidation_
;
67 // Invalidation from the last time update was called.
68 Region recording_invalidation_
;
69 gfx::Rect last_updated_visible_content_rect_
;
71 int update_source_frame_number_
;
72 bool can_use_lcd_text_for_update_
;
74 bool nearest_neighbor_
;
76 DISALLOW_COPY_AND_ASSIGN(PictureLayer
);
81 #endif // CC_LAYERS_PICTURE_LAYER_H_