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

Side by Side Diff: gpu/command_buffer/service/in_process_command_buffer.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: Return False on invalid stream id 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "gpu/command_buffer/service/in_process_command_buffer.h" 5 #include "gpu/command_buffer/service/in_process_command_buffer.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 DCHECK_EQ(fence_sync - 1, flushed_fence_sync_release_); 699 DCHECK_EQ(fence_sync - 1, flushed_fence_sync_release_);
700 } 700 }
701 701
702 QueueTask(base::Bind(&InProcessCommandBuffer::CreateImageOnGpuThread, 702 QueueTask(base::Bind(&InProcessCommandBuffer::CreateImageOnGpuThread,
703 base::Unretained(this), new_id, handle, 703 base::Unretained(this), new_id, handle,
704 gfx::Size(width, height), gpu_memory_buffer->GetFormat(), 704 gfx::Size(width, height), gpu_memory_buffer->GetFormat(),
705 internalformat, order_num, fence_sync)); 705 internalformat, order_num, fence_sync));
706 706
707 if (fence_sync) { 707 if (fence_sync) {
708 flushed_fence_sync_release_ = fence_sync; 708 flushed_fence_sync_release_ = fence_sync;
709 SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(), fence_sync); 709 SyncToken sync_token(GetNamespaceID(), GetExtraCommandBufferData(),
710 GetCommandBufferID(), fence_sync);
710 sync_token.SetVerifyFlush(); 711 sync_token.SetVerifyFlush();
711 gpu_memory_buffer_manager_->SetDestructionSyncToken(gpu_memory_buffer, 712 gpu_memory_buffer_manager_->SetDestructionSyncToken(gpu_memory_buffer,
712 sync_token); 713 sync_token);
713 } 714 }
714 715
715 return new_id; 716 return new_id;
716 } 717 }
717 718
718 void InProcessCommandBuffer::CreateImageOnGpuThread( 719 void InProcessCommandBuffer::CreateImageOnGpuThread(
719 int32 id, 720 int32 id,
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 bool make_current_success = false; 846 bool make_current_success = false;
846 { 847 {
847 base::AutoLock lock(command_buffer_lock_); 848 base::AutoLock lock(command_buffer_lock_);
848 make_current_success = MakeCurrent(); 849 make_current_success = MakeCurrent();
849 } 850 }
850 if (make_current_success) { 851 if (make_current_success) {
851 // Old sync points are global and do not have a command buffer ID, 852 // Old sync points are global and do not have a command buffer ID,
852 // We can simply use the GPUIO namespace with 0 for the command buffer ID 853 // We can simply use the GPUIO namespace with 0 for the command buffer ID
853 // (under normal circumstances 0 is invalid so will not be used) until 854 // (under normal circumstances 0 is invalid so will not be used) until
854 // the old sync points are replaced. 855 // the old sync points are replaced.
855 SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, sync_point); 856 SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, 0,
857 sync_point);
856 mailbox_manager->PushTextureUpdates(sync_token); 858 mailbox_manager->PushTextureUpdates(sync_token);
857 } 859 }
858 } 860 }
859 service_->sync_point_manager()->RetireSyncPoint(sync_point); 861 service_->sync_point_manager()->RetireSyncPoint(sync_point);
860 } 862 }
861 863
862 void InProcessCommandBuffer::SignalSyncPoint(unsigned sync_point, 864 void InProcessCommandBuffer::SignalSyncPoint(unsigned sync_point,
863 const base::Closure& callback) { 865 const base::Closure& callback) {
864 service_->sync_point_manager()->AddSyncPointCallback(sync_point, 866 service_->sync_point_manager()->AddSyncPointCallback(sync_point,
865 WrapCallback(callback)); 867 WrapCallback(callback));
866 } 868 }
867 869
868 bool InProcessCommandBuffer::WaitSyncPointOnGpuThread(unsigned sync_point) { 870 bool InProcessCommandBuffer::WaitSyncPointOnGpuThread(unsigned sync_point) {
869 service_->sync_point_manager()->WaitSyncPoint(sync_point); 871 service_->sync_point_manager()->WaitSyncPoint(sync_point);
870 gles2::MailboxManager* mailbox_manager = 872 gles2::MailboxManager* mailbox_manager =
871 decoder_->GetContextGroup()->mailbox_manager(); 873 decoder_->GetContextGroup()->mailbox_manager();
872 // Old sync points are global and do not have a command buffer ID, 874 // Old sync points are global and do not have a command buffer ID,
873 // We can simply use the GPUIO namespace with 0 for the command buffer ID 875 // We can simply use the GPUIO namespace with 0 for the command buffer ID
874 // (under normal circumstances 0 is invalid so will not be used) until 876 // (under normal circumstances 0 is invalid so will not be used) until
875 // the old sync points are replaced. 877 // the old sync points are replaced.
876 SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, sync_point); 878 SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, 0, sync_point);
877 mailbox_manager->PullTextureUpdates(sync_token); 879 mailbox_manager->PullTextureUpdates(sync_token);
878 return true; 880 return true;
879 } 881 }
880 882
881 void InProcessCommandBuffer::FenceSyncReleaseOnGpuThread(uint64_t release) { 883 void InProcessCommandBuffer::FenceSyncReleaseOnGpuThread(uint64_t release) {
882 DCHECK(!sync_point_client_->client_state()->IsFenceSyncReleased(release)); 884 DCHECK(!sync_point_client_->client_state()->IsFenceSyncReleased(release));
883 gles2::MailboxManager* mailbox_manager = 885 gles2::MailboxManager* mailbox_manager =
884 decoder_->GetContextGroup()->mailbox_manager(); 886 decoder_->GetContextGroup()->mailbox_manager();
885 if (mailbox_manager->UsesSync()) { 887 if (mailbox_manager->UsesSync()) {
886 bool make_current_success = false; 888 bool make_current_success = false;
887 { 889 {
888 base::AutoLock lock(command_buffer_lock_); 890 base::AutoLock lock(command_buffer_lock_);
889 make_current_success = MakeCurrent(); 891 make_current_success = MakeCurrent();
890 } 892 }
891 if (make_current_success) { 893 if (make_current_success) {
892 SyncToken sync_token(GetNamespaceID(), GetCommandBufferID(), release); 894 SyncToken sync_token(GetNamespaceID(), GetExtraCommandBufferData(),
895 GetCommandBufferID(), release);
893 mailbox_manager->PushTextureUpdates(sync_token); 896 mailbox_manager->PushTextureUpdates(sync_token);
894 } 897 }
895 } 898 }
896 899
897 sync_point_client_->ReleaseFenceSync(release); 900 sync_point_client_->ReleaseFenceSync(release);
898 } 901 }
899 902
900 bool InProcessCommandBuffer::WaitFenceSyncOnGpuThread( 903 bool InProcessCommandBuffer::WaitFenceSyncOnGpuThread(
901 gpu::CommandBufferNamespace namespace_id, 904 gpu::CommandBufferNamespace namespace_id,
902 uint64_t command_buffer_id, 905 uint64_t command_buffer_id,
(...skipping 12 matching lines...) Expand all
915 // Use waitable event which is signalled when the release fence is released. 918 // Use waitable event which is signalled when the release fence is released.
916 sync_point_client_->Wait( 919 sync_point_client_->Wait(
917 release_state.get(), release, 920 release_state.get(), release,
918 base::Bind(&base::WaitableEvent::Signal, 921 base::Bind(&base::WaitableEvent::Signal,
919 base::Unretained(&fence_sync_wait_event_))); 922 base::Unretained(&fence_sync_wait_event_)));
920 fence_sync_wait_event_.Wait(); 923 fence_sync_wait_event_.Wait();
921 } 924 }
922 925
923 gles2::MailboxManager* mailbox_manager = 926 gles2::MailboxManager* mailbox_manager =
924 decoder_->GetContextGroup()->mailbox_manager(); 927 decoder_->GetContextGroup()->mailbox_manager();
925 SyncToken sync_token(namespace_id, command_buffer_id, release); 928 SyncToken sync_token(namespace_id, 0, command_buffer_id, release);
926 mailbox_manager->PullTextureUpdates(sync_token); 929 mailbox_manager->PullTextureUpdates(sync_token);
927 return true; 930 return true;
928 } 931 }
929 932
930 void InProcessCommandBuffer::SignalSyncTokenOnGpuThread( 933 void InProcessCommandBuffer::SignalSyncTokenOnGpuThread(
931 const SyncToken& sync_token, const base::Closure& callback) { 934 const SyncToken& sync_token, const base::Closure& callback) {
932 gpu::SyncPointManager* sync_point_manager = service_->sync_point_manager(); 935 gpu::SyncPointManager* sync_point_manager = service_->sync_point_manager();
933 DCHECK(sync_point_manager); 936 DCHECK(sync_point_manager);
934 937
935 scoped_refptr<gpu::SyncPointClientState> release_state = 938 scoped_refptr<gpu::SyncPointClientState> release_state =
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 } 980 }
978 981
979 CommandBufferNamespace InProcessCommandBuffer::GetNamespaceID() const { 982 CommandBufferNamespace InProcessCommandBuffer::GetNamespaceID() const {
980 return CommandBufferNamespace::IN_PROCESS; 983 return CommandBufferNamespace::IN_PROCESS;
981 } 984 }
982 985
983 uint64_t InProcessCommandBuffer::GetCommandBufferID() const { 986 uint64_t InProcessCommandBuffer::GetCommandBufferID() const {
984 return command_buffer_id_; 987 return command_buffer_id_;
985 } 988 }
986 989
990 int32_t InProcessCommandBuffer::GetExtraCommandBufferData() const {
991 return 0;
992 }
993
987 uint64_t InProcessCommandBuffer::GenerateFenceSyncRelease() { 994 uint64_t InProcessCommandBuffer::GenerateFenceSyncRelease() {
988 return next_fence_sync_release_++; 995 return next_fence_sync_release_++;
989 } 996 }
990 997
991 bool InProcessCommandBuffer::IsFenceSyncRelease(uint64_t release) { 998 bool InProcessCommandBuffer::IsFenceSyncRelease(uint64_t release) {
992 return release != 0 && release < next_fence_sync_release_; 999 return release != 0 && release < next_fence_sync_release_;
993 } 1000 }
994 1001
995 bool InProcessCommandBuffer::IsFenceSyncFlushed(uint64_t release) { 1002 bool InProcessCommandBuffer::IsFenceSyncFlushed(uint64_t release) {
996 return release <= flushed_fence_sync_release_; 1003 return release <= flushed_fence_sync_release_;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 framebuffer_completeness_cache_ = 1140 framebuffer_completeness_cache_ =
1134 new gpu::gles2::FramebufferCompletenessCache; 1141 new gpu::gles2::FramebufferCompletenessCache;
1135 return framebuffer_completeness_cache_; 1142 return framebuffer_completeness_cache_;
1136 } 1143 }
1137 1144
1138 SyncPointManager* GpuInProcessThread::sync_point_manager() { 1145 SyncPointManager* GpuInProcessThread::sync_point_manager() {
1139 return sync_point_manager_; 1146 return sync_point_manager_;
1140 } 1147 }
1141 1148
1142 } // namespace gpu 1149 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/in_process_command_buffer.h ('k') | gpu/command_buffer/service/mailbox_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698