| 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 } | 79 } |
| 80 return false; | 80 return false; |
| 81 } | 81 } |
| 82 | 82 |
| 83 } // namespace | 83 } // namespace |
| 84 | 84 |
| 85 scoped_refptr<Picture> Picture::Create(gfx::Rect layer_rect) { | 85 scoped_refptr<Picture> Picture::Create(gfx::Rect layer_rect) { |
| 86 return make_scoped_refptr(new Picture(layer_rect)); | 86 return make_scoped_refptr(new Picture(layer_rect)); |
| 87 } | 87 } |
| 88 | 88 |
| 89 scoped_refptr<Picture> Picture::CreateFromValue(const base::Value* value) { | |
| 90 bool success; | |
| 91 scoped_refptr<Picture> picture = | |
| 92 make_scoped_refptr(new Picture(value, &success)); | |
| 93 if (!success) | |
| 94 picture = NULL; | |
| 95 return picture; | |
| 96 } | |
| 97 | |
| 98 Picture::Picture(gfx::Rect layer_rect) | 89 Picture::Picture(gfx::Rect layer_rect) |
| 99 : layer_rect_(layer_rect) { | 90 : layer_rect_(layer_rect) { |
| 100 // Instead of recording a trace event for object creation here, we wait for | 91 // Instead of recording a trace event for object creation here, we wait for |
| 101 // the picture to be recorded in Picture::Record. | 92 // the picture to be recorded in Picture::Record. |
| 102 } | 93 } |
| 103 | 94 |
| 104 Picture::Picture(const base::Value* raw_value, bool* success) { | 95 scoped_refptr<Picture> Picture::CreateFromValue(const base::Value* raw_value) { |
| 105 const base::DictionaryValue* value = NULL; | 96 const base::DictionaryValue* value = NULL; |
| 106 if (!raw_value->GetAsDictionary(&value)) { | 97 if (!raw_value->GetAsDictionary(&value)) |
| 107 *success = false; | 98 return NULL; |
| 108 return; | |
| 109 } | |
| 110 | 99 |
| 111 // Decode the picture from base64. | 100 // Decode the picture from base64. |
| 112 std::string encoded; | 101 std::string encoded; |
| 113 if (!value->GetString("skp64", &encoded)) { | 102 if (!value->GetString("skp64", &encoded)) |
| 114 *success = false; | 103 return NULL; |
| 115 return; | |
| 116 } | |
| 117 | 104 |
| 118 std::string decoded; | 105 std::string decoded; |
| 119 base::Base64Decode(encoded, &decoded); | 106 base::Base64Decode(encoded, &decoded); |
| 120 SkMemoryStream stream(decoded.data(), decoded.size()); | 107 SkMemoryStream stream(decoded.data(), decoded.size()); |
| 121 | 108 |
| 122 const base::Value* layer_rect = NULL; | 109 const base::Value* layer_rect_value = NULL; |
| 123 if (!value->Get("params.layer_rect", &layer_rect)) { | 110 if (!value->Get("params.layer_rect", &layer_rect_value)) |
| 124 *success = false; | 111 return NULL; |
| 125 return; | |
| 126 } | |
| 127 if (!MathUtil::FromValue(layer_rect, &layer_rect_)) { | |
| 128 *success = false; | |
| 129 return; | |
| 130 } | |
| 131 | 112 |
| 132 const base::Value* opaque_rect = NULL; | 113 gfx::Rect layer_rect; |
| 133 if (!value->Get("params.opaque_rect", &opaque_rect)) { | 114 if (!MathUtil::FromValue(layer_rect_value, &layer_rect)) |
| 134 *success = false; | 115 return NULL; |
| 135 return; | 116 |
| 136 } | 117 const base::Value* opaque_rect_value = NULL; |
| 137 if (!MathUtil::FromValue(opaque_rect, &opaque_rect_)) { | 118 if (!value->Get("params.opaque_rect", &opaque_rect_value)) |
| 138 *success = false; | 119 return NULL; |
| 139 return; | 120 |
| 140 } | 121 gfx::Rect opaque_rect; |
| 122 if (!MathUtil::FromValue(opaque_rect_value, &opaque_rect)) |
| 123 return NULL; |
| 141 | 124 |
| 142 // Read the picture. This creates an empty picture on failure. | 125 // Read the picture. This creates an empty picture on failure. |
| 143 picture_ = skia::AdoptRef(new SkPicture(&stream, success, &DecodeBitmap)); | 126 SkPicture* skpicture = SkPicture::CreateFromStream(&stream, &DecodeBitmap); |
| 127 if (skpicture == NULL) |
| 128 return NULL; |
| 129 |
| 130 return make_scoped_refptr(new Picture(skpicture, layer_rect, opaque_rect)); |
| 131 } |
| 132 |
| 133 Picture::Picture(SkPicture* picture, |
| 134 gfx::Rect layer_rect, |
| 135 gfx::Rect opaque_rect) : |
| 136 layer_rect_(layer_rect), |
| 137 opaque_rect_(opaque_rect), |
| 138 picture_(skia::AdoptRef(picture)) { |
| 144 } | 139 } |
| 145 | 140 |
| 146 Picture::Picture(const skia::RefPtr<SkPicture>& picture, | 141 Picture::Picture(const skia::RefPtr<SkPicture>& picture, |
| 147 gfx::Rect layer_rect, | 142 gfx::Rect layer_rect, |
| 148 gfx::Rect opaque_rect, | 143 gfx::Rect opaque_rect, |
| 149 const PixelRefMap& pixel_refs) : | 144 const PixelRefMap& pixel_refs) : |
| 150 layer_rect_(layer_rect), | 145 layer_rect_(layer_rect), |
| 151 opaque_rect_(opaque_rect), | 146 opaque_rect_(opaque_rect), |
| 152 picture_(picture), | 147 picture_(picture), |
| 153 pixel_refs_(pixel_refs) { | 148 pixel_refs_(pixel_refs) { |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 452 raster_data->Set("picture_id", TracedValue::CreateIDRef(this).release()); | 447 raster_data->Set("picture_id", TracedValue::CreateIDRef(this).release()); |
| 453 raster_data->SetDouble("scale", scale); | 448 raster_data->SetDouble("scale", scale); |
| 454 raster_data->SetDouble("rect_x", rect.x()); | 449 raster_data->SetDouble("rect_x", rect.x()); |
| 455 raster_data->SetDouble("rect_y", rect.y()); | 450 raster_data->SetDouble("rect_y", rect.y()); |
| 456 raster_data->SetDouble("rect_width", rect.width()); | 451 raster_data->SetDouble("rect_width", rect.width()); |
| 457 raster_data->SetDouble("rect_height", rect.height()); | 452 raster_data->SetDouble("rect_height", rect.height()); |
| 458 return TracedValue::FromValue(raster_data.release()); | 453 return TracedValue::FromValue(raster_data.release()); |
| 459 } | 454 } |
| 460 | 455 |
| 461 } // namespace cc | 456 } // namespace cc |
| OLD | NEW |