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

Side by Side Diff: cc/raster/gpu_raster_buffer_provider.cc

Issue 2175553002: Raster PictureLayerTiling with fractional translation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: combined Created 3 years, 8 months 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/raster/gpu_raster_buffer_provider.h ('k') | cc/raster/one_copy_raster_buffer_provider.h » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/raster/gpu_raster_buffer_provider.h" 5 #include "cc/raster/gpu_raster_buffer_provider.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 16 matching lines...) Expand all
27 27
28 namespace cc { 28 namespace cc {
29 namespace { 29 namespace {
30 30
31 static void RasterizeSource( 31 static void RasterizeSource(
32 const RasterSource* raster_source, 32 const RasterSource* raster_source,
33 bool resource_has_previous_content, 33 bool resource_has_previous_content,
34 const gfx::Size& resource_size, 34 const gfx::Size& resource_size,
35 const gfx::Rect& raster_full_rect, 35 const gfx::Rect& raster_full_rect,
36 const gfx::Rect& raster_dirty_rect, 36 const gfx::Rect& raster_dirty_rect,
37 float scale, 37 const ScaleTranslate2d& transform,
38 const RasterSource::PlaybackSettings& playback_settings, 38 const RasterSource::PlaybackSettings& playback_settings,
39 ContextProvider* context_provider, 39 ContextProvider* context_provider,
40 ResourceProvider::ScopedWriteLockGL* resource_lock, 40 ResourceProvider::ScopedWriteLockGL* resource_lock,
41 bool async_worker_context_enabled, 41 bool async_worker_context_enabled,
42 bool use_distance_field_text, 42 bool use_distance_field_text,
43 int msaa_sample_count) { 43 int msaa_sample_count) {
44 ScopedGpuRaster gpu_raster(context_provider); 44 ScopedGpuRaster gpu_raster(context_provider);
45 45
46 ResourceProvider::ScopedSkSurfaceProvider scoped_surface( 46 ResourceProvider::ScopedSkSurfaceProvider scoped_surface(
47 context_provider, resource_lock, async_worker_context_enabled, 47 context_provider, resource_lock, async_worker_context_enabled,
(...skipping 24 matching lines...) Expand all
72 static_cast<float>(playback_rect.size().GetArea()) / full_rect_size; 72 static_cast<float>(playback_rect.size().GetArea()) / full_rect_size;
73 float fraction_saved = 1.0f - fraction_partial_rastered; 73 float fraction_saved = 1.0f - fraction_partial_rastered;
74 UMA_HISTOGRAM_PERCENTAGE( 74 UMA_HISTOGRAM_PERCENTAGE(
75 base::StringPrintf("Renderer4.%s.PartialRasterPercentageSaved.Gpu", 75 base::StringPrintf("Renderer4.%s.PartialRasterPercentageSaved.Gpu",
76 client_name), 76 client_name),
77 100.0f * fraction_saved); 77 100.0f * fraction_saved);
78 } 78 }
79 79
80 raster_source->PlaybackToCanvas( 80 raster_source->PlaybackToCanvas(
81 sk_surface->getCanvas(), resource_lock->color_space_for_raster(), 81 sk_surface->getCanvas(), resource_lock->color_space_for_raster(),
82 raster_full_rect, playback_rect, scale, playback_settings); 82 raster_full_rect, playback_rect, transform, playback_settings);
83 } 83 }
84 84
85 } // namespace 85 } // namespace
86 86
87 GpuRasterBufferProvider::RasterBufferImpl::RasterBufferImpl( 87 GpuRasterBufferProvider::RasterBufferImpl::RasterBufferImpl(
88 GpuRasterBufferProvider* client, 88 GpuRasterBufferProvider* client,
89 ResourceProvider* resource_provider, 89 ResourceProvider* resource_provider,
90 ResourceId resource_id, 90 ResourceId resource_id,
91 bool async_worker_context_enabled, 91 bool async_worker_context_enabled,
92 bool resource_has_previous_content) 92 bool resource_has_previous_content)
93 : client_(client), 93 : client_(client),
94 lock_(resource_provider, resource_id, async_worker_context_enabled), 94 lock_(resource_provider, resource_id, async_worker_context_enabled),
95 resource_has_previous_content_(resource_has_previous_content) { 95 resource_has_previous_content_(resource_has_previous_content) {
96 client_->pending_raster_buffers_.insert(this); 96 client_->pending_raster_buffers_.insert(this);
97 } 97 }
98 98
99 GpuRasterBufferProvider::RasterBufferImpl::~RasterBufferImpl() { 99 GpuRasterBufferProvider::RasterBufferImpl::~RasterBufferImpl() {
100 client_->pending_raster_buffers_.erase(this); 100 client_->pending_raster_buffers_.erase(this);
101 } 101 }
102 102
103 void GpuRasterBufferProvider::RasterBufferImpl::Playback( 103 void GpuRasterBufferProvider::RasterBufferImpl::Playback(
104 const RasterSource* raster_source, 104 const RasterSource* raster_source,
105 const gfx::Rect& raster_full_rect, 105 const gfx::Rect& raster_full_rect,
106 const gfx::Rect& raster_dirty_rect, 106 const gfx::Rect& raster_dirty_rect,
107 uint64_t new_content_id, 107 uint64_t new_content_id,
108 float scale, 108 const ScaleTranslate2d& transform,
109 const RasterSource::PlaybackSettings& playback_settings) { 109 const RasterSource::PlaybackSettings& playback_settings) {
110 TRACE_EVENT0("cc", "GpuRasterBuffer::Playback"); 110 TRACE_EVENT0("cc", "GpuRasterBuffer::Playback");
111 client_->PlaybackOnWorkerThread(&lock_, sync_token_, 111 client_->PlaybackOnWorkerThread(&lock_, sync_token_,
112 resource_has_previous_content_, raster_source, 112 resource_has_previous_content_, raster_source,
113 raster_full_rect, raster_dirty_rect, 113 raster_full_rect, raster_dirty_rect,
114 new_content_id, scale, playback_settings); 114 new_content_id, transform, playback_settings);
115 } 115 }
116 116
117 GpuRasterBufferProvider::GpuRasterBufferProvider( 117 GpuRasterBufferProvider::GpuRasterBufferProvider(
118 ContextProvider* compositor_context_provider, 118 ContextProvider* compositor_context_provider,
119 ContextProvider* worker_context_provider, 119 ContextProvider* worker_context_provider,
120 ResourceProvider* resource_provider, 120 ResourceProvider* resource_provider,
121 bool use_distance_field_text, 121 bool use_distance_field_text,
122 int gpu_rasterization_msaa_sample_count, 122 int gpu_rasterization_msaa_sample_count,
123 ResourceFormat preferred_tile_format, 123 ResourceFormat preferred_tile_format,
124 bool async_worker_context_enabled) 124 bool async_worker_context_enabled)
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 } 245 }
246 246
247 void GpuRasterBufferProvider::PlaybackOnWorkerThread( 247 void GpuRasterBufferProvider::PlaybackOnWorkerThread(
248 ResourceProvider::ScopedWriteLockGL* resource_lock, 248 ResourceProvider::ScopedWriteLockGL* resource_lock,
249 const gpu::SyncToken& sync_token, 249 const gpu::SyncToken& sync_token,
250 bool resource_has_previous_content, 250 bool resource_has_previous_content,
251 const RasterSource* raster_source, 251 const RasterSource* raster_source,
252 const gfx::Rect& raster_full_rect, 252 const gfx::Rect& raster_full_rect,
253 const gfx::Rect& raster_dirty_rect, 253 const gfx::Rect& raster_dirty_rect,
254 uint64_t new_content_id, 254 uint64_t new_content_id,
255 float scale, 255 const ScaleTranslate2d& transform,
256 const RasterSource::PlaybackSettings& playback_settings) { 256 const RasterSource::PlaybackSettings& playback_settings) {
257 ContextProvider::ScopedContextLock scoped_context(worker_context_provider_); 257 ContextProvider::ScopedContextLock scoped_context(worker_context_provider_);
258 gpu::gles2::GLES2Interface* gl = scoped_context.ContextGL(); 258 gpu::gles2::GLES2Interface* gl = scoped_context.ContextGL();
259 DCHECK(gl); 259 DCHECK(gl);
260 260
261 if (async_worker_context_enabled_) { 261 if (async_worker_context_enabled_) {
262 // Early out if sync token is invalid. This happens if the compositor 262 // Early out if sync token is invalid. This happens if the compositor
263 // context was lost before ScheduleTasks was called. 263 // context was lost before ScheduleTasks was called.
264 if (!sync_token.HasData()) 264 if (!sync_token.HasData())
265 return; 265 return;
266 // Synchronize with compositor. 266 // Synchronize with compositor.
267 gl->WaitSyncTokenCHROMIUM(sync_token.GetConstData()); 267 gl->WaitSyncTokenCHROMIUM(sync_token.GetConstData());
268 } 268 }
269 269
270 RasterizeSource(raster_source, resource_has_previous_content, 270 RasterizeSource(raster_source, resource_has_previous_content,
271 resource_lock->size(), raster_full_rect, raster_dirty_rect, 271 resource_lock->size(), raster_full_rect, raster_dirty_rect,
272 scale, playback_settings, worker_context_provider_, 272 transform, playback_settings, worker_context_provider_,
273 resource_lock, async_worker_context_enabled_, 273 resource_lock, async_worker_context_enabled_,
274 use_distance_field_text_, msaa_sample_count_); 274 use_distance_field_text_, msaa_sample_count_);
275 275
276 const uint64_t fence_sync = gl->InsertFenceSyncCHROMIUM(); 276 const uint64_t fence_sync = gl->InsertFenceSyncCHROMIUM();
277 277
278 // Barrier to sync worker context output to cc context. 278 // Barrier to sync worker context output to cc context.
279 gl->OrderingBarrierCHROMIUM(); 279 gl->OrderingBarrierCHROMIUM();
280 280
281 // Generate sync token after the barrier for cross context synchronization. 281 // Generate sync token after the barrier for cross context synchronization.
282 gpu::SyncToken resource_sync_token; 282 gpu::SyncToken resource_sync_token;
283 gl->GenUnverifiedSyncTokenCHROMIUM(fence_sync, resource_sync_token.GetData()); 283 gl->GenUnverifiedSyncTokenCHROMIUM(fence_sync, resource_sync_token.GetData());
284 resource_lock->set_sync_token(resource_sync_token); 284 resource_lock->set_sync_token(resource_sync_token);
285 resource_lock->set_synchronized(!async_worker_context_enabled_); 285 resource_lock->set_synchronized(!async_worker_context_enabled_);
286 } 286 }
287 287
288 } // namespace cc 288 } // namespace cc
OLDNEW
« no previous file with comments | « cc/raster/gpu_raster_buffer_provider.h ('k') | cc/raster/one_copy_raster_buffer_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698