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. |
danakj
2014/05/01 20:31:57
this comment says what, not why. can you either ma
Stephen Chennney
2014/05/02 18:40:44
Done.
| |
285 // canvas. | 288 canvas = skia::AdoptRef(SkCreateNullCanvas()); |
286 canvas.clear(); | 289 graphics_context_status = ContentLayerClient::GRAPHICS_CONTEXT_DISABLED; |
287 break; | 290 break; |
288 case RECORD_WITH_SKRECORD: | 291 case RECORD_WITH_SKRECORD: |
289 recording.reset(new EXPERIMENTAL::SkRecording(layer_rect_.width(), | 292 recording.reset(new EXPERIMENTAL::SkRecording(layer_rect_.width(), |
290 layer_rect_.height())); | 293 layer_rect_.height())); |
291 canvas = skia::SharePtr(recording->canvas()); | 294 canvas = skia::SharePtr(recording->canvas()); |
292 break; | 295 break; |
293 default: | 296 default: |
294 NOTREACHED(); | 297 NOTREACHED(); |
295 } | 298 } |
296 | 299 |
297 if (canvas) { | 300 canvas->save(); |
298 canvas->save(); | 301 canvas->translate(SkFloatToScalar(-layer_rect_.x()), |
299 canvas->translate(SkFloatToScalar(-layer_rect_.x()), | 302 SkFloatToScalar(-layer_rect_.y())); |
300 SkFloatToScalar(-layer_rect_.y())); | |
301 | 303 |
302 SkRect layer_skrect = SkRect::MakeXYWH(layer_rect_.x(), | 304 SkRect layer_skrect = SkRect::MakeXYWH(layer_rect_.x(), |
303 layer_rect_.y(), | 305 layer_rect_.y(), |
304 layer_rect_.width(), | 306 layer_rect_.width(), |
305 layer_rect_.height()); | 307 layer_rect_.height()); |
306 canvas->clipRect(layer_skrect); | 308 canvas->clipRect(layer_skrect); |
307 } | |
308 | 309 |
309 gfx::RectF opaque_layer_rect; | 310 gfx::RectF opaque_layer_rect; |
310 painter->PaintContents(canvas.get(), layer_rect_, &opaque_layer_rect); | 311 painter->PaintContents( |
312 canvas.get(), layer_rect_, &opaque_layer_rect, graphics_context_status); | |
311 | 313 |
312 if (canvas) | 314 canvas->restore(); |
313 canvas->restore(); | |
314 picture_ = skia::AdoptRef(recorder.endRecording()); | 315 picture_ = skia::AdoptRef(recorder.endRecording()); |
315 DCHECK(picture_); | 316 DCHECK(picture_); |
316 | 317 |
317 if (recording) { | 318 if (recording) { |
318 // SkRecording requires it's the only one holding onto canvas before we | 319 // SkRecording requires it's the only one holding onto canvas before we |
319 // may call releasePlayback(). (This helps enforce thread-safety.) | 320 // may call releasePlayback(). (This helps enforce thread-safety.) |
320 canvas.clear(); | 321 canvas.clear(); |
321 playback_.reset(recording->releasePlayback()); | 322 playback_.reset(recording->releasePlayback()); |
322 } | 323 } |
323 | 324 |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
577 | 578 |
578 scoped_refptr<base::debug::ConvertableToTraceFormat> | 579 scoped_refptr<base::debug::ConvertableToTraceFormat> |
579 Picture::AsTraceableRecordData() const { | 580 Picture::AsTraceableRecordData() const { |
580 scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue()); | 581 scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue()); |
581 record_data->Set("picture_id", TracedValue::CreateIDRef(this).release()); | 582 record_data->Set("picture_id", TracedValue::CreateIDRef(this).release()); |
582 record_data->Set("layer_rect", MathUtil::AsValue(layer_rect_).release()); | 583 record_data->Set("layer_rect", MathUtil::AsValue(layer_rect_).release()); |
583 return TracedValue::FromValue(record_data.release()); | 584 return TracedValue::FromValue(record_data.release()); |
584 } | 585 } |
585 | 586 |
586 } // namespace cc | 587 } // namespace cc |
OLD | NEW |