Chromium Code Reviews| 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::GraphicsContextEnabled; | |
| 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. |
| 285 // canvas. | 288 graphics_context_status = ContentLayerClient::GraphicsContextDisabled; |
| 286 canvas.clear(); | |
| 287 break; | 289 break; |
| 288 case RECORD_WITH_SKRECORD: | 290 case RECORD_WITH_SKRECORD: |
| 289 recording.reset(new EXPERIMENTAL::SkRecording(layer_rect_.width(), | 291 recording.reset(new EXPERIMENTAL::SkRecording(layer_rect_.width(), |
| 290 layer_rect_.height())); | 292 layer_rect_.height())); |
| 291 canvas = skia::SharePtr(recording->canvas()); | 293 canvas = skia::SharePtr(recording->canvas()); |
| 292 break; | 294 break; |
| 293 default: | 295 default: |
| 294 NOTREACHED(); | 296 NOTREACHED(); |
| 295 } | 297 } |
| 296 | 298 |
| 297 if (canvas) { | 299 if (canvas) { |
|
danakj
2014/05/01 17:07:50
This if() can go away too?
Stephen Chennney
2014/05/01 19:12:26
Yep, done. I also think we should use the null can
| |
| 298 canvas->save(); | 300 canvas->save(); |
| 299 canvas->translate(SkFloatToScalar(-layer_rect_.x()), | 301 canvas->translate(SkFloatToScalar(-layer_rect_.x()), |
| 300 SkFloatToScalar(-layer_rect_.y())); | 302 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 } | 309 } |
| 308 | 310 |
| 309 gfx::RectF opaque_layer_rect; | 311 gfx::RectF opaque_layer_rect; |
| 310 painter->PaintContents(canvas.get(), layer_rect_, &opaque_layer_rect); | 312 painter->PaintContents( |
| 313 canvas.get(), layer_rect_, &opaque_layer_rect, graphics_context_status); | |
| 311 | 314 |
| 312 if (canvas) | 315 if (canvas) |
|
danakj
2014/05/01 17:07:50
and this?
Stephen Chennney
2014/05/01 19:12:26
Done.
| |
| 313 canvas->restore(); | 316 canvas->restore(); |
| 314 picture_ = skia::AdoptRef(recorder.endRecording()); | 317 picture_ = skia::AdoptRef(recorder.endRecording()); |
| 315 DCHECK(picture_); | 318 DCHECK(picture_); |
| 316 | 319 |
| 317 if (recording) { | 320 if (recording) { |
| 318 // SkRecording requires it's the only one holding onto canvas before we | 321 // SkRecording requires it's the only one holding onto canvas before we |
| 319 // may call releasePlayback(). (This helps enforce thread-safety.) | 322 // may call releasePlayback(). (This helps enforce thread-safety.) |
| 320 canvas.clear(); | 323 canvas.clear(); |
| 321 playback_.reset(recording->releasePlayback()); | 324 playback_.reset(recording->releasePlayback()); |
| 322 } | 325 } |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 577 | 580 |
| 578 scoped_refptr<base::debug::ConvertableToTraceFormat> | 581 scoped_refptr<base::debug::ConvertableToTraceFormat> |
| 579 Picture::AsTraceableRecordData() const { | 582 Picture::AsTraceableRecordData() const { |
| 580 scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue()); | 583 scoped_ptr<base::DictionaryValue> record_data(new base::DictionaryValue()); |
| 581 record_data->Set("picture_id", TracedValue::CreateIDRef(this).release()); | 584 record_data->Set("picture_id", TracedValue::CreateIDRef(this).release()); |
| 582 record_data->Set("layer_rect", MathUtil::AsValue(layer_rect_).release()); | 585 record_data->Set("layer_rect", MathUtil::AsValue(layer_rect_).release()); |
| 583 return TracedValue::FromValue(record_data.release()); | 586 return TracedValue::FromValue(record_data.release()); |
| 584 } | 587 } |
| 585 | 588 |
| 586 } // namespace cc | 589 } // namespace cc |
| OLD | NEW |