OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/resources/caching_bitmap_content_layer_updater.h" | 5 #include "cc/resources/caching_bitmap_content_layer_updater.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "cc/resources/layer_painter.h" | 8 #include "cc/resources/layer_painter.h" |
9 #include "skia/ext/platform_canvas.h" | 9 #include "skia/ext/platform_canvas.h" |
10 | 10 |
11 namespace cc { | 11 namespace cc { |
12 | 12 |
13 scoped_refptr<CachingBitmapContentLayerUpdater> | 13 scoped_refptr<CachingBitmapContentLayerUpdater> |
14 CachingBitmapContentLayerUpdater::Create(scoped_ptr<LayerPainter> painter) { | 14 CachingBitmapContentLayerUpdater::Create( |
| 15 scoped_ptr<LayerPainter> painter, |
| 16 RenderingStatsInstrumentation* stats_instrumentation) { |
15 return make_scoped_refptr( | 17 return make_scoped_refptr( |
16 new CachingBitmapContentLayerUpdater(painter.Pass())); | 18 new CachingBitmapContentLayerUpdater(painter.Pass(), |
| 19 stats_instrumentation)); |
17 } | 20 } |
18 | 21 |
19 CachingBitmapContentLayerUpdater::CachingBitmapContentLayerUpdater( | 22 CachingBitmapContentLayerUpdater::CachingBitmapContentLayerUpdater( |
20 scoped_ptr<LayerPainter> painter) | 23 scoped_ptr<LayerPainter> painter, |
21 : BitmapContentLayerUpdater(painter.Pass()), pixels_did_change_(false) {} | 24 RenderingStatsInstrumentation* stats_instrumentation) |
| 25 : BitmapContentLayerUpdater(painter.Pass(), stats_instrumentation), |
| 26 pixels_did_change_(false) {} |
22 | 27 |
23 CachingBitmapContentLayerUpdater::~CachingBitmapContentLayerUpdater() {} | 28 CachingBitmapContentLayerUpdater::~CachingBitmapContentLayerUpdater() {} |
24 | 29 |
25 void CachingBitmapContentLayerUpdater::PrepareToUpdate( | 30 void CachingBitmapContentLayerUpdater::PrepareToUpdate( |
26 gfx::Rect content_rect, | 31 gfx::Rect content_rect, |
27 gfx::Size tile_size, | 32 gfx::Size tile_size, |
28 float contents_width_scale, | 33 float contents_width_scale, |
29 float contents_height_scale, | 34 float contents_height_scale, |
30 gfx::Rect* resulting_opaque_rect, | 35 gfx::Rect* resulting_opaque_rect) { |
31 RenderingStats* stats) { | |
32 BitmapContentLayerUpdater::PrepareToUpdate(content_rect, | 36 BitmapContentLayerUpdater::PrepareToUpdate(content_rect, |
33 tile_size, | 37 tile_size, |
34 contents_width_scale, | 38 contents_width_scale, |
35 contents_height_scale, | 39 contents_height_scale, |
36 resulting_opaque_rect, | 40 resulting_opaque_rect); |
37 stats); | |
38 | 41 |
39 const SkBitmap& new_bitmap = canvas_->getDevice()->accessBitmap(false); | 42 const SkBitmap& new_bitmap = canvas_->getDevice()->accessBitmap(false); |
40 SkAutoLockPixels lock(new_bitmap); | 43 SkAutoLockPixels lock(new_bitmap); |
41 DCHECK_GT(new_bitmap.bytesPerPixel(), 0); | 44 DCHECK_GT(new_bitmap.bytesPerPixel(), 0); |
42 pixels_did_change_ = new_bitmap.config() != cached_bitmap_.config() || | 45 pixels_did_change_ = new_bitmap.config() != cached_bitmap_.config() || |
43 new_bitmap.height() != cached_bitmap_.height() || | 46 new_bitmap.height() != cached_bitmap_.height() || |
44 new_bitmap.width() != cached_bitmap_.width() || | 47 new_bitmap.width() != cached_bitmap_.width() || |
45 memcmp(new_bitmap.getPixels(), | 48 memcmp(new_bitmap.getPixels(), |
46 cached_bitmap_.getPixels(), | 49 cached_bitmap_.getPixels(), |
47 new_bitmap.getSafeSize()); | 50 new_bitmap.getSafeSize()); |
48 | 51 |
49 if (pixels_did_change_) | 52 if (pixels_did_change_) |
50 new_bitmap.deepCopyTo(&cached_bitmap_, new_bitmap.config()); | 53 new_bitmap.deepCopyTo(&cached_bitmap_, new_bitmap.config()); |
51 } | 54 } |
52 | 55 |
53 } // namespace cc | 56 } // namespace cc |
OLD | NEW |