| OLD | NEW |
| (Empty) |
| 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. | |
| 4 | |
| 5 #ifndef CC_RESOURCES_PICTURE_H_ | |
| 6 #define CC_RESOURCES_PICTURE_H_ | |
| 7 | |
| 8 #include "base/basictypes.h" | |
| 9 #include "base/containers/hash_tables.h" | |
| 10 #include "base/lazy_instance.h" | |
| 11 #include "base/logging.h" | |
| 12 #include "base/memory/ref_counted.h" | |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/trace_event/trace_event.h" | |
| 15 #include "cc/base/cc_export.h" | |
| 16 #include "cc/base/region.h" | |
| 17 #include "cc/resources/pixel_ref_map.h" | |
| 18 #include "cc/resources/recording_source.h" | |
| 19 #include "skia/ext/refptr.h" | |
| 20 #include "third_party/skia/include/core/SkPicture.h" | |
| 21 #include "ui/gfx/geometry/rect.h" | |
| 22 | |
| 23 class SkPixelRef; | |
| 24 | |
| 25 namespace base { | |
| 26 class Value; | |
| 27 } | |
| 28 | |
| 29 namespace skia { | |
| 30 class AnalysisCanvas; | |
| 31 } | |
| 32 | |
| 33 namespace cc { | |
| 34 | |
| 35 class ContentLayerClient; | |
| 36 | |
| 37 class CC_EXPORT Picture | |
| 38 : public base::RefCountedThreadSafe<Picture> { | |
| 39 public: | |
| 40 static scoped_refptr<Picture> Create( | |
| 41 const gfx::Rect& layer_rect, | |
| 42 ContentLayerClient* client, | |
| 43 const gfx::Size& tile_grid_size, | |
| 44 bool gather_pixels_refs, | |
| 45 RecordingSource::RecordingMode recording_mode); | |
| 46 static scoped_refptr<Picture> CreateFromValue(const base::Value* value); | |
| 47 static scoped_refptr<Picture> CreateFromSkpValue(const base::Value* value); | |
| 48 | |
| 49 gfx::Rect LayerRect() const { return layer_rect_; } | |
| 50 | |
| 51 // Has Record() been called yet? | |
| 52 bool HasRecording() const { return picture_.get() != NULL; } | |
| 53 | |
| 54 bool IsSuitableForGpuRasterization(const char** reason) const; | |
| 55 int ApproximateOpCount() const; | |
| 56 size_t ApproximateMemoryUsage() const; | |
| 57 | |
| 58 bool HasText() const; | |
| 59 | |
| 60 // Apply this scale and raster the negated region into the canvas. | |
| 61 // |negated_content_region| specifies the region to be clipped out of the | |
| 62 // raster operation, i.e., the parts of the canvas which will not get drawn | |
| 63 // to. | |
| 64 int Raster(SkCanvas* canvas, | |
| 65 SkPicture::AbortCallback* callback, | |
| 66 const Region& negated_content_region, | |
| 67 float contents_scale) const; | |
| 68 | |
| 69 // Draw the picture directly into the given canvas, without applying any | |
| 70 // clip/scale/layer transformations. | |
| 71 void Replay(SkCanvas* canvas, SkPicture::AbortCallback* callback = NULL); | |
| 72 | |
| 73 scoped_ptr<base::Value> AsValue() const; | |
| 74 | |
| 75 void EmitTraceSnapshot() const; | |
| 76 void EmitTraceSnapshotAlias(Picture* original) const; | |
| 77 | |
| 78 bool WillPlayBackBitmaps() const { return picture_->willPlayBackBitmaps(); } | |
| 79 | |
| 80 PixelRefMap::Iterator GetPixelRefMapIterator( | |
| 81 const gfx::Rect& layer_rect) const; | |
| 82 | |
| 83 private: | |
| 84 Picture(const gfx::Rect& layer_rect, const gfx::Size& tile_grid_size); | |
| 85 // This constructor assumes SkPicture is already ref'd and transfers | |
| 86 // ownership to this picture. | |
| 87 Picture(const skia::RefPtr<SkPicture>&, | |
| 88 const gfx::Rect& layer_rect, | |
| 89 const PixelRefMap& pixel_refs); | |
| 90 // This constructor will call AdoptRef on the SkPicture. | |
| 91 Picture(SkPicture*, const gfx::Rect& layer_rect); | |
| 92 ~Picture(); | |
| 93 | |
| 94 // Record a paint operation. To be able to safely use this SkPicture for | |
| 95 // playback on a different thread this can only be called once. | |
| 96 void Record(ContentLayerClient* client, | |
| 97 RecordingSource::RecordingMode recording_mode); | |
| 98 | |
| 99 // Gather pixel refs from recording. | |
| 100 void GatherPixelRefs(); | |
| 101 | |
| 102 gfx::Rect layer_rect_; | |
| 103 skia::RefPtr<SkPicture> picture_; | |
| 104 | |
| 105 PixelRefMap pixel_refs_; | |
| 106 | |
| 107 scoped_refptr<base::trace_event::ConvertableToTraceFormat> | |
| 108 AsTraceableRasterData(float scale) const; | |
| 109 scoped_refptr<base::trace_event::ConvertableToTraceFormat> | |
| 110 AsTraceableRecordData() const; | |
| 111 | |
| 112 friend class base::RefCountedThreadSafe<Picture>; | |
| 113 friend class PixelRefMap::Iterator; | |
| 114 DISALLOW_COPY_AND_ASSIGN(Picture); | |
| 115 }; | |
| 116 | |
| 117 } // namespace cc | |
| 118 | |
| 119 #endif // CC_RESOURCES_PICTURE_H_ | |
| OLD | NEW |