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

Side by Side Diff: content/common/gpu/texture_image_transport_surface.cc

Issue 10690168: Aura: Resize locks with --ui-enable-threaded-compositing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: OSX compile fix. Created 8 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 | Annotate | Revision Log
« no previous file with comments | « content/common/gpu/texture_image_transport_surface.h ('k') | ui/aura/bench/bench_main.cc » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "content/common/gpu/texture_image_transport_surface.h" 5 #include "content/common/gpu/texture_image_transport_surface.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 28 matching lines...) Expand all
39 : fbo_id_(0), 39 : fbo_id_(0),
40 front_(0), 40 front_(0),
41 stub_destroyed_(false), 41 stub_destroyed_(false),
42 backbuffer_suggested_allocation_(true), 42 backbuffer_suggested_allocation_(true),
43 frontbuffer_suggested_allocation_(true), 43 frontbuffer_suggested_allocation_(true),
44 frontbuffer_is_protected_(true), 44 frontbuffer_is_protected_(true),
45 protection_state_id_(0), 45 protection_state_id_(0),
46 handle_(handle), 46 handle_(handle),
47 parent_stub_(NULL), 47 parent_stub_(NULL),
48 is_swap_buffers_pending_(false), 48 is_swap_buffers_pending_(false),
49 did_unschedule_(false) { 49 did_unschedule_(false),
50 did_flip_(false) {
50 helper_.reset(new ImageTransportHelper(this, 51 helper_.reset(new ImageTransportHelper(this,
51 manager, 52 manager,
52 stub, 53 stub,
53 gfx::kNullPluginWindow)); 54 gfx::kNullPluginWindow));
54 } 55 }
55 56
56 TextureImageTransportSurface::~TextureImageTransportSurface() { 57 TextureImageTransportSurface::~TextureImageTransportSurface() {
57 DCHECK(stub_destroyed_); 58 DCHECK(stub_destroyed_);
58 Destroy(); 59 Destroy();
59 } 60 }
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 ScopedTextureBinder texture_binder(back_texture_service_id); 317 ScopedTextureBinder texture_binder(back_texture_service_id);
317 318
318 for (size_t i = 0; i < regions_to_copy.size(); ++i) { 319 for (size_t i = 0; i < regions_to_copy.size(); ++i) {
319 const gfx::Rect& region_to_copy = regions_to_copy[i]; 320 const gfx::Rect& region_to_copy = regions_to_copy[i];
320 if (!region_to_copy.IsEmpty()) { 321 if (!region_to_copy.IsEmpty()) {
321 glCopyTexSubImage2D(GL_TEXTURE_2D, 0, region_to_copy.x(), 322 glCopyTexSubImage2D(GL_TEXTURE_2D, 0, region_to_copy.x(),
322 region_to_copy.y(), region_to_copy.x(), region_to_copy.y(), 323 region_to_copy.y(), region_to_copy.x(), region_to_copy.y(),
323 region_to_copy.width(), region_to_copy.height()); 324 region_to_copy.width(), region_to_copy.height());
324 } 325 }
325 } 326 }
326 } else { 327 } else if (!surfaces_same_size && did_flip_) {
327 DCHECK(new_damage_rect == gfx::Rect(expected_size)); 328 DCHECK(new_damage_rect == gfx::Rect(expected_size));
328 } 329 }
329 330
330 glFlush(); 331 glFlush();
331 front_ = back(); 332 front_ = back();
332 previous_damage_rect_ = new_damage_rect; 333 previous_damage_rect_ = new_damage_rect;
333 334
334 DCHECK(textures_[front()].client_id); 335 DCHECK(textures_[front()].client_id);
335 336
336 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params; 337 GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 if (is_protected && textures_[front()].info->service_id() && 385 if (is_protected && textures_[front()].info->service_id() &&
385 textures_[front()].sent_to_client) { 386 textures_[front()].sent_to_client) {
386 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; 387 GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
387 params.surface_handle = textures_[front()].client_id; 388 params.surface_handle = textures_[front()].client_id;
388 params.protection_state_id = protection_state_id_; 389 params.protection_state_id = protection_state_id_;
389 params.skip_ack = true; 390 params.skip_ack = true;
390 helper_->SendAcceleratedSurfaceBuffersSwapped(params); 391 helper_->SendAcceleratedSurfaceBuffersSwapped(params);
391 } 392 }
392 } 393 }
393 394
394 void TextureImageTransportSurface::OnBufferPresented(uint32 sync_point) { 395 void TextureImageTransportSurface::OnBufferPresented(bool presented,
396 uint32 sync_point) {
395 if (sync_point == 0) { 397 if (sync_point == 0) {
396 BufferPresentedImpl(); 398 BufferPresentedImpl(presented);
397 } else { 399 } else {
398 helper_->manager()->sync_point_manager()->AddSyncPointCallback( 400 helper_->manager()->sync_point_manager()->AddSyncPointCallback(
399 sync_point, 401 sync_point,
400 base::Bind(&TextureImageTransportSurface::BufferPresentedImpl, 402 base::Bind(&TextureImageTransportSurface::BufferPresentedImpl,
401 this->AsWeakPtr())); 403 this->AsWeakPtr(),
404 presented));
402 } 405 }
403 } 406 }
404 407
405 void TextureImageTransportSurface::BufferPresentedImpl() { 408 void TextureImageTransportSurface::BufferPresentedImpl(bool presented) {
406 DCHECK(is_swap_buffers_pending_); 409 DCHECK(is_swap_buffers_pending_);
407 is_swap_buffers_pending_ = false; 410 is_swap_buffers_pending_ = false;
408 411
412 if (presented) {
413 // If we had not flipped, the two frame damage tracking is inconsistent.
414 // So conservatively take the whole frame.
415 if (!did_flip_)
416 previous_damage_rect_ = gfx::Rect(textures_[front()].size);
417 } else {
418 front_ = back();
419 previous_damage_rect_ = gfx::Rect(0, 0, 0, 0);
420 }
421
422 did_flip_ = presented;
423
409 // We're relying on the fact that the parent context is 424 // We're relying on the fact that the parent context is
410 // finished with it's context when it inserts the sync point that 425 // finished with it's context when it inserts the sync point that
411 // triggers this callback. 426 // triggers this callback.
412 if (helper_->MakeCurrent()) { 427 if (helper_->MakeCurrent()) {
413 if (textures_[front()].size != textures_[back()].size || 428 if (textures_[front()].size != textures_[back()].size ||
414 !textures_[back()].info->service_id() || 429 !textures_[back()].info->service_id() ||
415 !textures_[back()].sent_to_client) { 430 !textures_[back()].sent_to_client) {
416 // We may get an ACK from a stale swap just to reschedule. In that case, 431 // We may get an ACK from a stale swap just to reschedule. In that case,
417 // we may not have a backbuffer suggestion and should not recreate one. 432 // we may not have a backbuffer suggestion and should not recreate one.
418 if (backbuffer_suggested_allocation_) 433 if (backbuffer_suggested_allocation_)
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 if (!texture.sent_to_client) 558 if (!texture.sent_to_client)
544 continue; 559 continue;
545 GpuHostMsg_AcceleratedSurfaceRelease_Params params; 560 GpuHostMsg_AcceleratedSurfaceRelease_Params params;
546 params.identifier = texture.client_id; 561 params.identifier = texture.client_id;
547 helper_->SendAcceleratedSurfaceRelease(params); 562 helper_->SendAcceleratedSurfaceRelease(params);
548 } 563 }
549 parent_stub_ = NULL; 564 parent_stub_ = NULL;
550 } 565 }
551 566
552 } // namespace content 567 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/texture_image_transport_surface.h ('k') | ui/aura/bench/bench_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698