Chromium Code Reviews| Index: cc/output/ca_layer_overlay.cc |
| diff --git a/cc/output/ca_layer_overlay.cc b/cc/output/ca_layer_overlay.cc |
| index 3e53dd4d5d6918461330ff5d94375cd727a10374..b798fdb277b8952d372c335f8e7dcb931e8e7736 100644 |
| --- a/cc/output/ca_layer_overlay.cc |
| +++ b/cc/output/ca_layer_overlay.cc |
| @@ -38,13 +38,23 @@ enum CALayerResult { |
| CA_LAYER_FAILED_COUNT, |
| }; |
| +bool SetResource(ResourceProvider* resource_provider, |
|
erikchen
2016/05/26 00:32:01
I think the conditional should live outside the fu
ccameron
2016/05/26 18:49:15
But but ... it seems so wasteful to look the same
|
| + unsigned resource_id, |
| + CALayerOverlay* ca_layer_overlay) { |
| + std::unique_ptr<ResourceProvider::ScopedReadLockGpuMemoryBuffer> |
| + resource_lock(new ResourceProvider::ScopedReadLockGpuMemoryBuffer( |
| + resource_provider, resource_id)); |
| + if (!resource_lock->IsOverlayCandidate()) |
| + return false; |
| + ca_layer_overlay->resource_lock = std::move(resource_lock); |
| + return true; |
| +} |
| + |
| CALayerResult FromStreamVideoQuad(ResourceProvider* resource_provider, |
| const StreamVideoDrawQuad* quad, |
| CALayerOverlay* ca_layer_overlay) { |
| - unsigned resource_id = quad->resource_id(); |
| - if (!resource_provider->IsOverlayCandidate(resource_id)) |
| + if (!SetResource(resource_provider, quad->resource_id(), ca_layer_overlay)) |
| return CA_LAYER_FAILED_STREAM_VIDEO_NOT_CANDIDATE; |
| - ca_layer_overlay->contents_resource_id = resource_id; |
| // TODO(ccameron): Support merging at least some basic transforms into the |
| // layer transform. |
| if (!quad->matrix.IsIdentity()) |
| @@ -68,8 +78,7 @@ CALayerResult FromSolidColorDrawQuad(const SolidColorDrawQuad* quad, |
| CALayerResult FromTextureQuad(ResourceProvider* resource_provider, |
| const TextureDrawQuad* quad, |
| CALayerOverlay* ca_layer_overlay) { |
| - unsigned resource_id = quad->resource_id(); |
| - if (!resource_provider->IsOverlayCandidate(resource_id)) |
| + if (!SetResource(resource_provider, quad->resource_id(), ca_layer_overlay)) |
| return CA_LAYER_FAILED_TEXTURE_NOT_CANDIDATE; |
| if (quad->y_flipped) { |
| // The anchor point is at the bottom-left corner of the CALayer. The |
| @@ -80,7 +89,6 @@ CALayerResult FromTextureQuad(ResourceProvider* resource_provider, |
| 0, ca_layer_overlay->bounds_rect.height(), 0); |
| ca_layer_overlay->transform.preScale(1, -1, 1); |
| } |
| - ca_layer_overlay->contents_resource_id = resource_id; |
| ca_layer_overlay->contents_rect = |
| BoundingRect(quad->uv_top_left, quad->uv_bottom_right); |
| ca_layer_overlay->background_color = quad->background_color; |
| @@ -96,10 +104,8 @@ CALayerResult FromTextureQuad(ResourceProvider* resource_provider, |
| CALayerResult FromTileQuad(ResourceProvider* resource_provider, |
| const TileDrawQuad* quad, |
| CALayerOverlay* ca_layer_overlay) { |
| - unsigned resource_id = quad->resource_id(); |
| - if (!resource_provider->IsOverlayCandidate(resource_id)) |
| + if (!SetResource(resource_provider, quad->resource_id(), ca_layer_overlay)) |
| return CA_LAYER_FAILED_TILE_NOT_CANDIDATE; |
| - ca_layer_overlay->contents_resource_id = resource_id; |
| ca_layer_overlay->contents_rect = quad->tex_coord_rect; |
| ca_layer_overlay->contents_rect.Scale(1.f / quad->texture_size.width(), |
| 1.f / quad->texture_size.height()); |
| @@ -178,7 +184,7 @@ CALayerResult FromDrawQuad(ResourceProvider* resource_provider, |
| CALayerOverlay::CALayerOverlay() : filter(GL_LINEAR) {} |
| -CALayerOverlay::CALayerOverlay(const CALayerOverlay& other) = default; |
| +CALayerOverlay::CALayerOverlay(CALayerOverlay&& other) = default; |
| CALayerOverlay::~CALayerOverlay() {} |
| @@ -217,7 +223,7 @@ bool ProcessForCALayerOverlays(ResourceProvider* resource_provider, |
| } |
| } |
| - ca_layer_overlays->push_back(ca_layer); |
| + ca_layer_overlays->push_back(std::move(ca_layer)); |
| } |
| UMA_HISTOGRAM_ENUMERATION("Compositing.Renderer.CALayerResult", result, |