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/picture.h" | 5 #include "cc/resources/picture.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <set> | 9 #include <set> |
10 | 10 |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 | 266 |
267 scoped_ptr<EXPERIMENTAL::SkRecording> recording; | 267 scoped_ptr<EXPERIMENTAL::SkRecording> recording; |
268 | 268 |
269 skia::RefPtr<SkCanvas> canvas; | 269 skia::RefPtr<SkCanvas> canvas; |
270 canvas = skia::SharePtr( | 270 canvas = skia::SharePtr( |
271 recorder.beginRecording(layer_rect_.width(), | 271 recorder.beginRecording(layer_rect_.width(), |
272 layer_rect_.height(), | 272 layer_rect_.height(), |
273 &factory, | 273 &factory, |
274 SkPicture::kUsePathBoundsForClip_RecordingFlag)); | 274 SkPicture::kUsePathBoundsForClip_RecordingFlag)); |
275 | 275 |
| 276 ContentLayerClient::GraphicsContextStatus graphics_context_status = |
| 277 ContentLayerClient::GRAPHICS_CONTEXT_ENABLED; |
| 278 |
276 switch (recording_mode) { | 279 switch (recording_mode) { |
277 case RECORD_NORMALLY: | 280 case RECORD_NORMALLY: |
278 // Already setup for normal recording | 281 // Already setup for normal recording. |
279 break; | 282 break; |
280 case RECORD_WITH_SK_NULL_CANVAS: | 283 case RECORD_WITH_SK_NULL_CANVAS: |
281 canvas = skia::AdoptRef(SkCreateNullCanvas()); | 284 canvas = skia::AdoptRef(SkCreateNullCanvas()); |
282 break; | 285 break; |
283 case RECORD_WITH_PAINTING_DISABLED: | 286 case RECORD_WITH_PAINTING_DISABLED: |
284 // Blink's GraphicsContext will disable painting when given a NULL | 287 // We pass a disable flag through the paint calls when perfromance |
285 // canvas. | 288 // testing (the only time this case should ever arise) when we want to |
286 canvas.clear(); | 289 // prevent the Blink GraphicsContext object from consuming any compute |
| 290 // time. |
| 291 canvas = skia::AdoptRef(SkCreateNullCanvas()); |
| 292 graphics_context_status = ContentLayerClient::GRAPHICS_CONTEXT_DISABLED; |
287 break; | 293 break; |
288 case RECORD_WITH_SKRECORD: | 294 case RECORD_WITH_SKRECORD: |
289 recording.reset(new EXPERIMENTAL::SkRecording(layer_rect_.width(), | 295 recording.reset(new EXPERIMENTAL::SkRecording(layer_rect_.width(), |
290 layer_rect_.height())); | 296 layer_rect_.height())); |
291 canvas = skia::SharePtr(recording->canvas()); | 297 canvas = skia::SharePtr(recording->canvas()); |
292 break; | 298 break; |
293 default: | 299 default: |
294 NOTREACHED(); | 300 NOTREACHED(); |
295 } | 301 } |
296 | 302 |
297 if (canvas) { | 303 canvas->save(); |
298 canvas->save(); | 304 canvas->translate(SkFloatToScalar(-layer_rect_.x()), |
299 canvas->translate(SkFloatToScalar(-layer_rect_.x()), | 305 SkFloatToScalar(-layer_rect_.y())); |
300 SkFloatToScalar(-layer_rect_.y())); | |
301 | 306 |
302 SkRect layer_skrect = SkRect::MakeXYWH(layer_rect_.x(), | 307 SkRect layer_skrect = SkRect::MakeXYWH(layer_rect_.x(), |
303 layer_rect_.y(), | 308 layer_rect_.y(), |
304 layer_rect_.width(), | 309 layer_rect_.width(), |
305 layer_rect_.height()); | 310 layer_rect_.height()); |
306 canvas->clipRect(layer_skrect); | 311 canvas->clipRect(layer_skrect); |
307 } | |
308 | 312 |
309 gfx::RectF opaque_layer_rect; | 313 gfx::RectF opaque_layer_rect; |
310 painter->PaintContents(canvas.get(), layer_rect_, &opaque_layer_rect); | 314 painter->PaintContents( |
| 315 canvas.get(), layer_rect_, &opaque_layer_rect, graphics_context_status); |
311 | 316 |
312 if (canvas) | 317 canvas->restore(); |
313 canvas->restore(); | |
314 picture_ = skia::AdoptRef(recorder.endRecording()); | 318 picture_ = skia::AdoptRef(recorder.endRecording()); |
315 DCHECK(picture_); | 319 DCHECK(picture_); |
316 | 320 |
317 if (recording) { | 321 if (recording) { |
318 // SkRecording requires it's the only one holding onto canvas before we | 322 // SkRecording requires it's the only one holding onto canvas before we |
319 // may call releasePlayback(). (This helps enforce thread-safety.) | 323 // may call releasePlayback(). (This helps enforce thread-safety.) |
320 canvas.clear(); | 324 canvas.clear(); |
321 playback_.reset(recording->releasePlayback()); | 325 playback_.reset(recording->releasePlayback()); |
322 } | 326 } |
323 | 327 |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 | 581 |
578 scoped_refptr<base::debug::ConvertableToTraceFormat> | 582 scoped_refptr<base::debug::ConvertableToTraceFormat> |
579 Picture::AsTraceableRecordData() const { | 583 Picture::AsTraceableRecordData() const { |
580 scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue()); | 584 scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue()); |
581 record_data->Set("picture_id", TracedValue::CreateIDRef(this).release()); | 585 record_data->Set("picture_id", TracedValue::CreateIDRef(this).release()); |
582 record_data->Set("layer_rect", MathUtil::AsValue(layer_rect_).release()); | 586 record_data->Set("layer_rect", MathUtil::AsValue(layer_rect_).release()); |
583 return TracedValue::FromValue(record_data.release()); | 587 return TracedValue::FromValue(record_data.release()); |
584 } | 588 } |
585 | 589 |
586 } // namespace cc | 590 } // namespace cc |
OLD | NEW |