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

Side by Side Diff: content/common/gpu/client/command_buffer_proxy_impl.cc

Issue 1489573003: Added an extra sync token field for extra command buffer identification. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix mojom file Created 5 years 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
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/client/command_buffer_proxy_impl.h" 5 #include "content/common/gpu/client/command_buffer_proxy_impl.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 params.size = gfx::Size(width, height); 442 params.size = gfx::Size(width, height);
443 params.format = gpu_memory_buffer->GetFormat(); 443 params.format = gpu_memory_buffer->GetFormat();
444 params.internal_format = internal_format; 444 params.internal_format = internal_format;
445 params.image_release_count = image_fence_sync; 445 params.image_release_count = image_fence_sync;
446 446
447 if (!Send(new GpuCommandBufferMsg_CreateImage(route_id_, params))) 447 if (!Send(new GpuCommandBufferMsg_CreateImage(route_id_, params)))
448 return -1; 448 return -1;
449 449
450 if (image_fence_sync) { 450 if (image_fence_sync) {
451 gpu::SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(), 451 gpu::SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(),
452 image_fence_sync); 452 GetExtraCommandBufferData(), image_fence_sync);
453 453
454 // Force a synchronous IPC to validate sync token. 454 // Force a synchronous IPC to validate sync token.
455 channel_->ValidateFlushIDReachedServer(stream_id_, true); 455 channel_->ValidateFlushIDReachedServer(stream_id_, true);
456 sync_token.SetVerifyFlush(); 456 sync_token.SetVerifyFlush();
457 457
458 gpu_memory_buffer_manager->SetDestructionSyncToken(gpu_memory_buffer, 458 gpu_memory_buffer_manager->SetDestructionSyncToken(gpu_memory_buffer,
459 sync_token); 459 sync_token);
460 } 460 }
461 461
462 return new_id; 462 return new_id;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 512 }
513 513
514 gpu::CommandBufferNamespace CommandBufferProxyImpl::GetNamespaceID() const { 514 gpu::CommandBufferNamespace CommandBufferProxyImpl::GetNamespaceID() const {
515 return gpu::CommandBufferNamespace::GPU_IO; 515 return gpu::CommandBufferNamespace::GPU_IO;
516 } 516 }
517 517
518 uint64_t CommandBufferProxyImpl::GetCommandBufferID() const { 518 uint64_t CommandBufferProxyImpl::GetCommandBufferID() const {
519 return command_buffer_id_; 519 return command_buffer_id_;
520 } 520 }
521 521
522 uint32_t CommandBufferProxyImpl::GetExtraCommandBufferData() const {
523 return static_cast<uint32_t>(stream_id_);
dcheng 2015/12/01 01:29:14 Wouldn't it be easier just to make the signs match
David Yen 2015/12/01 21:29:45 Done.
524 }
525
522 uint64_t CommandBufferProxyImpl::GenerateFenceSyncRelease() { 526 uint64_t CommandBufferProxyImpl::GenerateFenceSyncRelease() {
523 return next_fence_sync_release_++; 527 return next_fence_sync_release_++;
524 } 528 }
525 529
526 bool CommandBufferProxyImpl::IsFenceSyncRelease(uint64_t release) { 530 bool CommandBufferProxyImpl::IsFenceSyncRelease(uint64_t release) {
527 return release != 0 && release < next_fence_sync_release_; 531 return release != 0 && release < next_fence_sync_release_;
528 } 532 }
529 533
530 bool CommandBufferProxyImpl::IsFenceSyncFlushed(uint64_t release) { 534 bool CommandBufferProxyImpl::IsFenceSyncFlushed(uint64_t release) {
531 return release != 0 && release <= flushed_fence_sync_release_; 535 return release != 0 && release <= flushed_fence_sync_release_;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 } 574 }
571 575
572 signal_tasks_.insert(std::make_pair(signal_id, callback)); 576 signal_tasks_.insert(std::make_pair(signal_id, callback));
573 } 577 }
574 578
575 bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken( 579 bool CommandBufferProxyImpl::CanWaitUnverifiedSyncToken(
576 const gpu::SyncToken* sync_token) { 580 const gpu::SyncToken* sync_token) {
577 // Can only wait on an unverified sync token if it is from the same channel. 581 // Can only wait on an unverified sync token if it is from the same channel.
578 const uint64_t token_channel = sync_token->command_buffer_id() >> 32; 582 const uint64_t token_channel = sync_token->command_buffer_id() >> 32;
579 const uint64_t channel = command_buffer_id_ >> 32; 583 const uint64_t channel = command_buffer_id_ >> 32;
580 return (sync_token->namespace_id() == gpu::CommandBufferNamespace::GPU_IO && 584 if (sync_token->namespace_id() != gpu::CommandBufferNamespace::GPU_IO ||
581 token_channel == channel); 585 token_channel != channel) {
586 return false;
587 }
588
589 // If waiting on a different stream, flush pending commands on that stream.
590 const int32_t release_stream_id =
591 static_cast<int32_t>(sync_token->extra_data_field());
592 if (release_stream_id != stream_id_)
593 channel_->FlushPendingStream(release_stream_id);
594
595 return true;
582 } 596 }
583 597
584 uint32 CommandBufferProxyImpl::InsertSyncPoint() { 598 uint32 CommandBufferProxyImpl::InsertSyncPoint() {
585 CheckLock(); 599 CheckLock();
586 if (last_state_.error != gpu::error::kNoError) 600 if (last_state_.error != gpu::error::kNoError)
587 return 0; 601 return 0;
588 602
589 uint32 sync_point = 0; 603 uint32 sync_point = 0;
590 Send(new GpuCommandBufferMsg_InsertSyncPoint(route_id_, true, &sync_point)); 604 Send(new GpuCommandBufferMsg_InsertSyncPoint(route_id_, true, &sync_point));
591 return sync_point; 605 return sync_point;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
757 } 771 }
758 } 772 }
759 773
760 void CommandBufferProxyImpl::OnUpdateVSyncParameters(base::TimeTicks timebase, 774 void CommandBufferProxyImpl::OnUpdateVSyncParameters(base::TimeTicks timebase,
761 base::TimeDelta interval) { 775 base::TimeDelta interval) {
762 if (!update_vsync_parameters_completion_callback_.is_null()) 776 if (!update_vsync_parameters_completion_callback_.is_null())
763 update_vsync_parameters_completion_callback_.Run(timebase, interval); 777 update_vsync_parameters_completion_callback_.Run(timebase, interval);
764 } 778 }
765 779
766 } // namespace content 780 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/client/command_buffer_proxy_impl.h ('k') | content/common/gpu/client/gpu_channel_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698