Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(525)

Side by Side Diff: cc/output/gl_renderer.cc

Issue 2473973002: NOT for review (for discussion): Query IOSurfaceIsInUse in the browser process
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/gl_renderer.h ('k') | gpu/GLES2/extensions/CHROMIUM/CHROMIUM_schedule_ca_layer.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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/output/gl_renderer.h" 5 #include "cc/output/gl_renderer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "cc/quads/picture_draw_quad.h" 42 #include "cc/quads/picture_draw_quad.h"
43 #include "cc/quads/render_pass.h" 43 #include "cc/quads/render_pass.h"
44 #include "cc/quads/stream_video_draw_quad.h" 44 #include "cc/quads/stream_video_draw_quad.h"
45 #include "cc/quads/texture_draw_quad.h" 45 #include "cc/quads/texture_draw_quad.h"
46 #include "cc/raster/scoped_gpu_raster.h" 46 #include "cc/raster/scoped_gpu_raster.h"
47 #include "cc/resources/resource_pool.h" 47 #include "cc/resources/resource_pool.h"
48 #include "cc/resources/scoped_resource.h" 48 #include "cc/resources/scoped_resource.h"
49 #include "gpu/GLES2/gl2extchromium.h" 49 #include "gpu/GLES2/gl2extchromium.h"
50 #include "gpu/command_buffer/client/context_support.h" 50 #include "gpu/command_buffer/client/context_support.h"
51 #include "gpu/command_buffer/client/gles2_interface.h" 51 #include "gpu/command_buffer/client/gles2_interface.h"
52 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
52 #include "gpu/command_buffer/common/gpu_memory_allocation.h" 53 #include "gpu/command_buffer/common/gpu_memory_allocation.h"
53 #include "media/base/media_switches.h" 54 #include "media/base/media_switches.h"
54 #include "skia/ext/texture_handle.h" 55 #include "skia/ext/texture_handle.h"
55 #include "third_party/skia/include/core/SkBitmap.h" 56 #include "third_party/skia/include/core/SkBitmap.h"
56 #include "third_party/skia/include/core/SkColor.h" 57 #include "third_party/skia/include/core/SkColor.h"
57 #include "third_party/skia/include/core/SkColorFilter.h" 58 #include "third_party/skia/include/core/SkColorFilter.h"
58 #include "third_party/skia/include/core/SkImage.h" 59 #include "third_party/skia/include/core/SkImage.h"
59 #include "third_party/skia/include/core/SkSurface.h" 60 #include "third_party/skia/include/core/SkSurface.h"
60 #include "third_party/skia/include/gpu/GrContext.h" 61 #include "third_party/skia/include/gpu/GrContext.h"
61 #include "third_party/skia/include/gpu/gl/GrGLInterface.h" 62 #include "third_party/skia/include/gpu/gl/GrGLInterface.h"
(...skipping 2866 matching lines...) Expand 10 before | Expand all | Expand 10 after
2928 2929
2929 swapping_overlay_resources_.push_back(std::move(pending_overlay_resources_)); 2930 swapping_overlay_resources_.push_back(std::move(pending_overlay_resources_));
2930 pending_overlay_resources_.clear(); 2931 pending_overlay_resources_.clear();
2931 2932
2932 output_surface_->SwapBuffers(std::move(output_frame)); 2933 output_surface_->SwapBuffers(std::move(output_frame));
2933 2934
2934 swap_buffer_rect_ = gfx::Rect(); 2935 swap_buffer_rect_ = gfx::Rect();
2935 } 2936 }
2936 2937
2937 void GLRenderer::SwapBuffersComplete() { 2938 void GLRenderer::SwapBuffersComplete() {
2938 if (settings_->release_overlay_resources_after_gpu_query) { 2939 if (swapping_overlay_resources_.size() > 1) {
2939 // Once a resource has been swap-ACKed, send a query to the GPU process to
2940 // ask if the resource is no longer being consumed by the system compositor.
2941 // The response will come with the next swap-ACK.
2942 if (!swapping_overlay_resources_.empty()) {
2943 for (OverlayResourceLock& lock : swapping_overlay_resources_.front()) {
2944 unsigned texture = lock->texture_id();
2945 if (swapped_and_acked_overlay_resources_.find(texture) ==
2946 swapped_and_acked_overlay_resources_.end()) {
2947 swapped_and_acked_overlay_resources_[texture] = std::move(lock);
2948 }
2949 }
2950 swapping_overlay_resources_.pop_front();
2951 }
2952
2953 if (!swapped_and_acked_overlay_resources_.empty()) {
2954 std::vector<unsigned> textures;
2955 textures.reserve(swapped_and_acked_overlay_resources_.size());
2956 for (auto& pair : swapped_and_acked_overlay_resources_) {
2957 textures.push_back(pair.first);
2958 }
2959 gl_->ScheduleCALayerInUseQueryCHROMIUM(textures.size(), textures.data());
2960 }
2961 } else if (swapping_overlay_resources_.size() > 1) {
2962 // If a query is not needed to release the overlay buffers, we can assume 2940 // If a query is not needed to release the overlay buffers, we can assume
2963 // that once a swap buffer has completed we can remove the oldest buffers 2941 // that once a swap buffer has completed we can remove the oldest buffers
2964 // from the queue. 2942 // from the queue.
2965 swapping_overlay_resources_.pop_front(); 2943 swapping_overlay_resources_.pop_front();
2966 } 2944 }
2967 } 2945 }
2968 2946
2969 void GLRenderer::DidReceiveTextureInUseResponses( 2947 void GLRenderer::DidReceiveTextureInUseResponses(
2970 const gpu::TextureInUseResponses& responses) { 2948 const gpu::TextureInUseResponses& responses) {
2971 DCHECK(settings_->release_overlay_resources_after_gpu_query); 2949 DCHECK(settings_->release_overlay_resources_after_gpu_query);
2972 for (const gpu::TextureInUseResponse& response : responses) { 2950 for (const gpu::TextureInUseResponse& response : responses) {
2973 if (!response.in_use) { 2951 auto found = ca_layer_resources_.find(response.texture);
2974 swapped_and_acked_overlay_resources_.erase(response.texture); 2952 DCHECK(found != ca_layer_resources_.end());
2953 CALayerResourceLock& ca_layer_resource_lock = found->second;
2954 DCHECK(ca_layer_resource_lock.outstanding_ack_count > 0);
2955
2956 ca_layer_resource_lock.outstanding_ack_count -= 1;
2957 ca_layer_resource_lock.in_use_valid = response.in_use_valid;
2958
2959 // Requesting the GpuMemoryBuffer handle is expensive. We should do it only
2960 // only once per resource.
2961 if (!response.gpu_memory_buffer_handle.is_null()) {
2962 DCHECK(!ca_layer_resource_lock.gpu_memory_buffer);
2963 // The size and format for this resource do not matter.
2964 gfx::Size dummy_size(256, 256);
2965 gfx::BufferFormat dummy_format = gfx::BufferFormat::RGBA_8888;
2966 DCHECK(response.gpu_memory_buffer_handle.type ==
2967 gfx::GpuMemoryBufferType::IO_SURFACE_BUFFER);
2968 ca_layer_resource_lock.gpu_memory_buffer =
2969 resource_provider_->gpu_memory_buffer_manager()
2970 ->CreateGpuMemoryBufferFromHandle(
2971 response.gpu_memory_buffer_handle, dummy_size, dummy_format);
2975 } 2972 }
2976 } 2973 }
2974
2975 // Clear locks on resources that are no longer in use.
2976 auto iter = ca_layer_resources_.begin();
2977 while (iter != ca_layer_resources_.end()) {
2978 auto iter_old = iter++;
2979 CALayerResourceLock& ca_layer_resource_lock = iter_old->second;
2980 if (ca_layer_resource_lock.outstanding_ack_count == 0) {
2981 if (!ca_layer_resource_lock.in_use_valid ||
2982 !ca_layer_resource_lock.gpu_memory_buffer ||
2983 !ca_layer_resource_lock.gpu_memory_buffer
2984 ->IsInUseByMacOSWindowServer()) {
2985 ca_layer_resources_.erase(iter_old);
2986 }
2987 }
2988 }
2989
2977 color_lut_cache_.Swap(); 2990 color_lut_cache_.Swap();
2978 } 2991 }
2979 2992
2980 void GLRenderer::GetFramebufferPixelsAsync( 2993 void GLRenderer::GetFramebufferPixelsAsync(
2981 const DrawingFrame* frame, 2994 const DrawingFrame* frame,
2982 const gfx::Rect& rect, 2995 const gfx::Rect& rect,
2983 std::unique_ptr<CopyOutputRequest> request) { 2996 std::unique_ptr<CopyOutputRequest> request) {
2984 DCHECK(!request->IsEmpty()); 2997 DCHECK(!request->IsEmpty());
2985 if (request->IsEmpty()) 2998 if (request->IsEmpty())
2986 return; 2999 return;
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
3767 3780
3768 bool GLRenderer::IsContextLost() { 3781 bool GLRenderer::IsContextLost() {
3769 return gl_->GetGraphicsResetStatusKHR() != GL_NO_ERROR; 3782 return gl_->GetGraphicsResetStatusKHR() != GL_NO_ERROR;
3770 } 3783 }
3771 3784
3772 void GLRenderer::ScheduleCALayers(DrawingFrame* frame) { 3785 void GLRenderer::ScheduleCALayers(DrawingFrame* frame) {
3773 if (overlay_resource_pool_) { 3786 if (overlay_resource_pool_) {
3774 overlay_resource_pool_->CheckBusyResources(); 3787 overlay_resource_pool_->CheckBusyResources();
3775 } 3788 }
3776 3789
3790 std::vector<unsigned> textures_and_handle_requests_for_in_use_query;
3777 scoped_refptr<CALayerOverlaySharedState> shared_state; 3791 scoped_refptr<CALayerOverlaySharedState> shared_state;
3778 size_t copied_render_pass_count = 0; 3792 size_t copied_render_pass_count = 0;
3779 for (const CALayerOverlay& ca_layer_overlay : frame->ca_layer_overlay_list) { 3793 for (const CALayerOverlay& ca_layer_overlay : frame->ca_layer_overlay_list) {
3794 std::unique_ptr<ResourceProvider::ScopedReadLockGL> lock;
3780 if (ca_layer_overlay.rpdq) { 3795 if (ca_layer_overlay.rpdq) {
3781 ScheduleRenderPassDrawQuad(&ca_layer_overlay, frame); 3796 lock = ScheduleRenderPassDrawQuad(&ca_layer_overlay, frame);
3782 shared_state = nullptr; 3797 shared_state = nullptr;
3783 ++copied_render_pass_count; 3798 ++copied_render_pass_count;
3784 continue; 3799 } else {
3800 ResourceId contents_resource_id = ca_layer_overlay.contents_resource_id;
3801 unsigned texture_id = 0;
3802 if (contents_resource_id) {
3803 lock = base::MakeUnique<ResourceProvider::ScopedReadLockGL>(
3804 resource_provider_, contents_resource_id);
3805 texture_id = lock->texture_id();
3806 }
3807 GLfloat contents_rect[4] = {
3808 ca_layer_overlay.contents_rect.x(),
3809 ca_layer_overlay.contents_rect.y(),
3810 ca_layer_overlay.contents_rect.width(),
3811 ca_layer_overlay.contents_rect.height(),
3812 };
3813 GLfloat bounds_rect[4] = {
3814 ca_layer_overlay.bounds_rect.x(), ca_layer_overlay.bounds_rect.y(),
3815 ca_layer_overlay.bounds_rect.width(),
3816 ca_layer_overlay.bounds_rect.height(),
3817 };
3818 GLboolean is_clipped = ca_layer_overlay.shared_state->is_clipped;
3819 GLfloat clip_rect[4] = {
3820 ca_layer_overlay.shared_state->clip_rect.x(),
3821 ca_layer_overlay.shared_state->clip_rect.y(),
3822 ca_layer_overlay.shared_state->clip_rect.width(),
3823 ca_layer_overlay.shared_state->clip_rect.height()};
3824 GLint sorting_context_id =
3825 ca_layer_overlay.shared_state->sorting_context_id;
3826 GLfloat transform[16];
3827 ca_layer_overlay.shared_state->transform.asColMajorf(transform);
3828 unsigned filter = ca_layer_overlay.filter;
3829
3830 if (ca_layer_overlay.shared_state != shared_state) {
3831 shared_state = ca_layer_overlay.shared_state;
3832 gl_->ScheduleCALayerSharedStateCHROMIUM(
3833 ca_layer_overlay.shared_state->opacity, is_clipped, clip_rect,
3834 sorting_context_id, transform);
3835 }
3836 gl_->ScheduleCALayerCHROMIUM(
3837 texture_id, contents_rect, ca_layer_overlay.background_color,
3838 ca_layer_overlay.edge_aa_mask, bounds_rect, filter);
3785 } 3839 }
3840 if (lock) {
3841 unsigned texture = lock->texture_id();
3842 CALayerResourceLock& ca_layer_resource_lock =
3843 ca_layer_resources_[texture];
3786 3844
3787 ResourceId contents_resource_id = ca_layer_overlay.contents_resource_id; 3845 textures_and_handle_requests_for_in_use_query.push_back(texture);
3788 unsigned texture_id = 0; 3846 textures_and_handle_requests_for_in_use_query.push_back(
3789 if (contents_resource_id) { 3847 !ca_layer_resource_lock.gpu_memory_buffer &&
3790 pending_overlay_resources_.push_back( 3848 !ca_layer_resource_lock.outstanding_ack_count);
3791 base::MakeUnique<ResourceProvider::ScopedReadLockGL>( 3849
3792 resource_provider_, contents_resource_id)); 3850 ca_layer_resource_lock.outstanding_ack_count += 1;
3793 texture_id = pending_overlay_resources_.back()->texture_id(); 3851 if (!ca_layer_resource_lock.lock)
3852 ca_layer_resource_lock.lock = std::move(lock);
3794 } 3853 }
3795 GLfloat contents_rect[4] = { 3854 }
3796 ca_layer_overlay.contents_rect.x(), ca_layer_overlay.contents_rect.y(),
3797 ca_layer_overlay.contents_rect.width(),
3798 ca_layer_overlay.contents_rect.height(),
3799 };
3800 GLfloat bounds_rect[4] = {
3801 ca_layer_overlay.bounds_rect.x(), ca_layer_overlay.bounds_rect.y(),
3802 ca_layer_overlay.bounds_rect.width(),
3803 ca_layer_overlay.bounds_rect.height(),
3804 };
3805 GLboolean is_clipped = ca_layer_overlay.shared_state->is_clipped;
3806 GLfloat clip_rect[4] = {ca_layer_overlay.shared_state->clip_rect.x(),
3807 ca_layer_overlay.shared_state->clip_rect.y(),
3808 ca_layer_overlay.shared_state->clip_rect.width(),
3809 ca_layer_overlay.shared_state->clip_rect.height()};
3810 GLint sorting_context_id =
3811 ca_layer_overlay.shared_state->sorting_context_id;
3812 GLfloat transform[16];
3813 ca_layer_overlay.shared_state->transform.asColMajorf(transform);
3814 unsigned filter = ca_layer_overlay.filter;
3815 3855
3816 if (ca_layer_overlay.shared_state != shared_state) { 3856 // Schedule a query to open the GpuMemoryBuffers for all resources.
3817 shared_state = ca_layer_overlay.shared_state; 3857 // TODO: add the need_gmb_for_in_use_query argument to avoid creating extra
3818 gl_->ScheduleCALayerSharedStateCHROMIUM( 3858 // mach ports when it's unnecessary.
3819 ca_layer_overlay.shared_state->opacity, is_clipped, clip_rect, 3859 gl_->ScheduleCALayerInUseQueryCHROMIUM(
3820 sorting_context_id, transform); 3860 textures_and_handle_requests_for_in_use_query.size() / 2,
3821 } 3861 textures_and_handle_requests_for_in_use_query.data());
3822 gl_->ScheduleCALayerCHROMIUM(
3823 texture_id, contents_rect, ca_layer_overlay.background_color,
3824 ca_layer_overlay.edge_aa_mask, bounds_rect, filter);
3825 }
3826 3862
3827 // Take the number of copied render passes in this frame, and use 3 times that 3863 // Take the number of copied render passes in this frame, and use 3 times that
3828 // amount as the cache limit. 3864 // amount as the cache limit.
3829 if (overlay_resource_pool_) { 3865 if (overlay_resource_pool_) {
3830 overlay_resource_pool_->SetResourceUsageLimits( 3866 overlay_resource_pool_->SetResourceUsageLimits(
3831 std::numeric_limits<std::size_t>::max(), copied_render_pass_count * 5); 3867 std::numeric_limits<std::size_t>::max(), copied_render_pass_count * 5);
3832 } 3868 }
3833 } 3869 }
3834 3870
3835 void GLRenderer::ScheduleOverlays(DrawingFrame* frame) { 3871 void GLRenderer::ScheduleOverlays(DrawingFrame* frame) {
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
3989 UpdateRPDQUniforms(&params); 4025 UpdateRPDQUniforms(&params);
3990 4026
3991 // Prior to drawing, set up the destination framebuffer and viewport. 4027 // Prior to drawing, set up the destination framebuffer and viewport.
3992 gl_->BindFramebuffer(GL_FRAMEBUFFER, temp_fbo); 4028 gl_->BindFramebuffer(GL_FRAMEBUFFER, temp_fbo);
3993 gl_->Viewport(0, 0, updated_dst_rect.width(), updated_dst_rect.height()); 4029 gl_->Viewport(0, 0, updated_dst_rect.width(), updated_dst_rect.height());
3994 4030
3995 DrawRPDQ(params); 4031 DrawRPDQ(params);
3996 gl_->DeleteFramebuffers(1, &temp_fbo); 4032 gl_->DeleteFramebuffers(1, &temp_fbo);
3997 } 4033 }
3998 4034
3999 void GLRenderer::ScheduleRenderPassDrawQuad( 4035 std::unique_ptr<ResourceProvider::ScopedReadLockGL>
4000 const CALayerOverlay* ca_layer_overlay, 4036 GLRenderer::ScheduleRenderPassDrawQuad(const CALayerOverlay* ca_layer_overlay,
4001 DrawingFrame* external_frame) { 4037 DrawingFrame* external_frame) {
4002 DCHECK(ca_layer_overlay->rpdq); 4038 DCHECK(ca_layer_overlay->rpdq);
4003 4039
4004 if (!overlay_resource_pool_) { 4040 if (!overlay_resource_pool_) {
4005 overlay_resource_pool_ = ResourcePool::CreateForGpuMemoryBufferResources( 4041 overlay_resource_pool_ = ResourcePool::CreateForGpuMemoryBufferResources(
4006 resource_provider_, base::ThreadTaskRunnerHandle::Get().get(), 4042 resource_provider_, base::ThreadTaskRunnerHandle::Get().get(),
4007 gfx::BufferUsage::SCANOUT, base::TimeDelta::FromSeconds(3)); 4043 gfx::BufferUsage::SCANOUT, base::TimeDelta::FromSeconds(3));
4008 } 4044 }
4009 4045
4010 Resource* resource = nullptr; 4046 Resource* resource = nullptr;
4011 gfx::RectF new_bounds; 4047 gfx::RectF new_bounds;
4012 CopyRenderPassDrawQuadToOverlayResource(ca_layer_overlay, &resource, 4048 CopyRenderPassDrawQuadToOverlayResource(ca_layer_overlay, &resource,
4013 external_frame, &new_bounds); 4049 external_frame, &new_bounds);
4014 if (!resource || !resource->id()) 4050 if (!resource || !resource->id())
4015 return; 4051 return nullptr;
4016 4052
4017 pending_overlay_resources_.push_back( 4053 std::unique_ptr<ResourceProvider::ScopedReadLockGL> lock =
4018 base::MakeUnique<ResourceProvider::ScopedReadLockGL>(resource_provider_, 4054 base::MakeUnique<ResourceProvider::ScopedReadLockGL>(resource_provider_,
4019 resource->id())); 4055 resource->id());
4020 unsigned texture_id = pending_overlay_resources_.back()->texture_id();
4021 4056
4022 // Once a resource is released, it is marked as "busy". It will be 4057 // Once a resource is released, it is marked as "busy". It will be
4023 // available for reuse after the ScopedReadLockGL is destroyed. 4058 // available for reuse after the ScopedReadLockGL is destroyed.
4024 overlay_resource_pool_->ReleaseResource(resource); 4059 overlay_resource_pool_->ReleaseResource(resource);
4025 4060
4026 GLfloat contents_rect[4] = { 4061 GLfloat contents_rect[4] = {
4027 ca_layer_overlay->contents_rect.x(), ca_layer_overlay->contents_rect.y(), 4062 ca_layer_overlay->contents_rect.x(), ca_layer_overlay->contents_rect.y(),
4028 ca_layer_overlay->contents_rect.width(), 4063 ca_layer_overlay->contents_rect.width(),
4029 ca_layer_overlay->contents_rect.height(), 4064 ca_layer_overlay->contents_rect.height(),
4030 }; 4065 };
4031 GLfloat bounds_rect[4] = { 4066 GLfloat bounds_rect[4] = {
4032 new_bounds.x(), new_bounds.y(), new_bounds.width(), new_bounds.height(), 4067 new_bounds.x(), new_bounds.y(), new_bounds.width(), new_bounds.height(),
4033 }; 4068 };
4034 GLboolean is_clipped = ca_layer_overlay->shared_state->is_clipped; 4069 GLboolean is_clipped = ca_layer_overlay->shared_state->is_clipped;
4035 GLfloat clip_rect[4] = {ca_layer_overlay->shared_state->clip_rect.x(), 4070 GLfloat clip_rect[4] = {ca_layer_overlay->shared_state->clip_rect.x(),
4036 ca_layer_overlay->shared_state->clip_rect.y(), 4071 ca_layer_overlay->shared_state->clip_rect.y(),
4037 ca_layer_overlay->shared_state->clip_rect.width(), 4072 ca_layer_overlay->shared_state->clip_rect.width(),
4038 ca_layer_overlay->shared_state->clip_rect.height()}; 4073 ca_layer_overlay->shared_state->clip_rect.height()};
4039 GLint sorting_context_id = ca_layer_overlay->shared_state->sorting_context_id; 4074 GLint sorting_context_id = ca_layer_overlay->shared_state->sorting_context_id;
4040 SkMatrix44 transform = ca_layer_overlay->shared_state->transform; 4075 SkMatrix44 transform = ca_layer_overlay->shared_state->transform;
4041 GLfloat gl_transform[16]; 4076 GLfloat gl_transform[16];
4042 transform.asColMajorf(gl_transform); 4077 transform.asColMajorf(gl_transform);
4043 unsigned filter = ca_layer_overlay->filter; 4078 unsigned filter = ca_layer_overlay->filter;
4044 4079
4045 // The alpha has already been applied when copying the RPDQ to an IOSurface. 4080 // The alpha has already been applied when copying the RPDQ to an IOSurface.
4046 GLfloat alpha = 1; 4081 GLfloat alpha = 1;
4047 gl_->ScheduleCALayerSharedStateCHROMIUM(alpha, is_clipped, clip_rect, 4082 gl_->ScheduleCALayerSharedStateCHROMIUM(alpha, is_clipped, clip_rect,
4048 sorting_context_id, gl_transform); 4083 sorting_context_id, gl_transform);
4049 gl_->ScheduleCALayerCHROMIUM( 4084 gl_->ScheduleCALayerCHROMIUM(
4050 texture_id, contents_rect, ca_layer_overlay->background_color, 4085 lock->texture_id(), contents_rect, ca_layer_overlay->background_color,
4051 ca_layer_overlay->edge_aa_mask, bounds_rect, filter); 4086 ca_layer_overlay->edge_aa_mask, bounds_rect, filter);
4087 return lock;
4052 } 4088 }
4053 4089
4090 GLRenderer::CALayerResourceLock::CALayerResourceLock() = default;
4091 GLRenderer::CALayerResourceLock::~CALayerResourceLock() = default;
4092 GLRenderer::CALayerResourceLock::CALayerResourceLock(
4093 CALayerResourceLock&& ca_layer_resource) = default;
4094
4054 } // namespace cc 4095 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.h ('k') | gpu/GLES2/extensions/CHROMIUM/CHROMIUM_schedule_ca_layer.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698