| OLD | NEW |
| 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 "gpu/ipc/service/gpu_command_buffer_stub.h" | 5 #include "gpu/ipc/service/gpu_command_buffer_stub.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 bool have_context = false; | 269 bool have_context = false; |
| 270 // Ensure the appropriate GL context is current before handling any IPC | 270 // Ensure the appropriate GL context is current before handling any IPC |
| 271 // messages directed at the command buffer. This ensures that the message | 271 // messages directed at the command buffer. This ensures that the message |
| 272 // handler can assume that the context is current (not necessary for | 272 // handler can assume that the context is current (not necessary for |
| 273 // RetireSyncPoint or WaitSyncPoint). | 273 // RetireSyncPoint or WaitSyncPoint). |
| 274 if (decoder_.get() && | 274 if (decoder_.get() && |
| 275 message.type() != GpuCommandBufferMsg_SetGetBuffer::ID && | 275 message.type() != GpuCommandBufferMsg_SetGetBuffer::ID && |
| 276 message.type() != GpuCommandBufferMsg_WaitForTokenInRange::ID && | 276 message.type() != GpuCommandBufferMsg_WaitForTokenInRange::ID && |
| 277 message.type() != GpuCommandBufferMsg_WaitForGetOffsetInRange::ID && | 277 message.type() != GpuCommandBufferMsg_WaitForGetOffsetInRange::ID && |
| 278 message.type() != GpuCommandBufferMsg_RegisterTransferBuffer::ID && | 278 message.type() != GpuCommandBufferMsg_RegisterTransferBuffer::ID && |
| 279 message.type() != GpuCommandBufferMsg_DestroyTransferBuffer::ID) { | 279 message.type() != GpuCommandBufferMsg_DestroyTransferBuffer::ID && |
| 280 message.type() != GpuCommandBufferMsg_WaitSyncToken::ID && |
| 281 message.type() != GpuCommandBufferMsg_SignalSyncToken::ID && |
| 282 message.type() != GpuCommandBufferMsg_SignalQuery::ID) { |
| 280 if (!MakeCurrent()) | 283 if (!MakeCurrent()) |
| 281 return false; | 284 return false; |
| 282 have_context = true; | 285 have_context = true; |
| 283 } | 286 } |
| 284 | 287 |
| 285 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers | 288 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers |
| 286 // here. This is so the reply can be delayed if the scheduler is unscheduled. | 289 // here. This is so the reply can be delayed if the scheduler is unscheduled. |
| 287 bool handled = true; | 290 bool handled = true; |
| 288 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message) | 291 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message) |
| 289 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_SetGetBuffer, | 292 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_SetGetBuffer, |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 if (!surface_format.IsCompatible(default_surface->GetFormat()) && !offscreen) | 638 if (!surface_format.IsCompatible(default_surface->GetFormat()) && !offscreen) |
| 636 use_virtualized_gl_context_ = false; | 639 use_virtualized_gl_context_ = false; |
| 637 #endif | 640 #endif |
| 638 | 641 |
| 639 command_buffer_.reset(new CommandBufferService( | 642 command_buffer_.reset(new CommandBufferService( |
| 640 context_group_->transfer_buffer_manager())); | 643 context_group_->transfer_buffer_manager())); |
| 641 | 644 |
| 642 decoder_.reset(gles2::GLES2Decoder::Create(context_group_.get())); | 645 decoder_.reset(gles2::GLES2Decoder::Create(context_group_.get())); |
| 643 executor_.reset(new CommandExecutor(command_buffer_.get(), decoder_.get(), | 646 executor_.reset(new CommandExecutor(command_buffer_.get(), decoder_.get(), |
| 644 decoder_.get())); | 647 decoder_.get())); |
| 645 sync_point_client_ = channel_->sync_point_manager()->CreateSyncPointClient( | 648 sync_point_client_ = base::MakeUnique<SyncPointClient>( |
| 649 channel_->sync_point_manager(), |
| 646 channel_->GetSyncPointOrderData(stream_id_), | 650 channel_->GetSyncPointOrderData(stream_id_), |
| 647 CommandBufferNamespace::GPU_IO, command_buffer_id_); | 651 CommandBufferNamespace::GPU_IO, command_buffer_id_); |
| 648 | 652 |
| 649 executor_->SetPreemptByFlag(channel_->preempted_flag()); | 653 executor_->SetPreemptByFlag(channel_->preempted_flag()); |
| 650 | 654 |
| 651 decoder_->set_engine(executor_.get()); | 655 decoder_->set_engine(executor_.get()); |
| 652 | 656 |
| 653 if (offscreen) { | 657 if (offscreen) { |
| 654 if (init_params.attribs.depth_size > 0) { | 658 if (init_params.attribs.depth_size > 0) { |
| 655 surface_format.SetDepthBits(init_params.attribs.depth_size); | 659 surface_format.SetDepthBits(init_params.attribs.depth_size); |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 } | 780 } |
| 777 | 781 |
| 778 decoder_->GetLogger()->SetMsgCallback( | 782 decoder_->GetLogger()->SetMsgCallback( |
| 779 base::Bind(&GpuCommandBufferStub::SendConsoleMessage, | 783 base::Bind(&GpuCommandBufferStub::SendConsoleMessage, |
| 780 base::Unretained(this))); | 784 base::Unretained(this))); |
| 781 decoder_->SetShaderCacheCallback( | 785 decoder_->SetShaderCacheCallback( |
| 782 base::Bind(&GpuCommandBufferStub::SendCachedShader, | 786 base::Bind(&GpuCommandBufferStub::SendCachedShader, |
| 783 base::Unretained(this))); | 787 base::Unretained(this))); |
| 784 decoder_->SetFenceSyncReleaseCallback(base::Bind( | 788 decoder_->SetFenceSyncReleaseCallback(base::Bind( |
| 785 &GpuCommandBufferStub::OnFenceSyncRelease, base::Unretained(this))); | 789 &GpuCommandBufferStub::OnFenceSyncRelease, base::Unretained(this))); |
| 786 decoder_->SetWaitFenceSyncCallback(base::Bind( | 790 decoder_->SetWaitSyncTokenCallback(base::Bind( |
| 787 &GpuCommandBufferStub::OnWaitFenceSync, base::Unretained(this))); | 791 &GpuCommandBufferStub::OnWaitSyncToken, base::Unretained(this))); |
| 788 decoder_->SetDescheduleUntilFinishedCallback( | 792 decoder_->SetDescheduleUntilFinishedCallback( |
| 789 base::Bind(&GpuCommandBufferStub::OnDescheduleUntilFinished, | 793 base::Bind(&GpuCommandBufferStub::OnDescheduleUntilFinished, |
| 790 base::Unretained(this))); | 794 base::Unretained(this))); |
| 791 decoder_->SetRescheduleAfterFinishedCallback( | 795 decoder_->SetRescheduleAfterFinishedCallback( |
| 792 base::Bind(&GpuCommandBufferStub::OnRescheduleAfterFinished, | 796 base::Bind(&GpuCommandBufferStub::OnRescheduleAfterFinished, |
| 793 base::Unretained(this))); | 797 base::Unretained(this))); |
| 794 | 798 |
| 795 command_buffer_->SetPutOffsetChangeCallback( | 799 command_buffer_->SetPutOffsetChangeCallback( |
| 796 base::Bind(&GpuCommandBufferStub::PutChanged, base::Unretained(this))); | 800 base::Bind(&GpuCommandBufferStub::PutChanged, base::Unretained(this))); |
| 797 command_buffer_->SetGetBufferChangeCallback(base::Bind( | 801 command_buffer_->SetGetBufferChangeCallback(base::Bind( |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 995 channel_->watchdog()->CheckArmed(); | 999 channel_->watchdog()->CheckArmed(); |
| 996 } | 1000 } |
| 997 | 1001 |
| 998 void GpuCommandBufferStub::ReportState() { command_buffer_->UpdateState(); } | 1002 void GpuCommandBufferStub::ReportState() { command_buffer_->UpdateState(); } |
| 999 | 1003 |
| 1000 void GpuCommandBufferStub::PutChanged() { | 1004 void GpuCommandBufferStub::PutChanged() { |
| 1001 FastSetActiveURL(active_url_, active_url_hash_, channel_); | 1005 FastSetActiveURL(active_url_, active_url_hash_, channel_); |
| 1002 executor_->PutChanged(); | 1006 executor_->PutChanged(); |
| 1003 } | 1007 } |
| 1004 | 1008 |
| 1005 void GpuCommandBufferStub::PullTextureUpdates( | |
| 1006 CommandBufferNamespace namespace_id, | |
| 1007 CommandBufferId command_buffer_id, | |
| 1008 uint32_t release) { | |
| 1009 gles2::MailboxManager* mailbox_manager = | |
| 1010 context_group_->mailbox_manager(); | |
| 1011 if (mailbox_manager->UsesSync() && MakeCurrent()) { | |
| 1012 SyncToken sync_token(namespace_id, 0, command_buffer_id, release); | |
| 1013 mailbox_manager->PullTextureUpdates(sync_token); | |
| 1014 } | |
| 1015 } | |
| 1016 | |
| 1017 void GpuCommandBufferStub::OnWaitSyncToken(const SyncToken& sync_token) { | |
| 1018 OnWaitFenceSync(sync_token.namespace_id(), sync_token.command_buffer_id(), | |
| 1019 sync_token.release_count()); | |
| 1020 } | |
| 1021 | |
| 1022 void GpuCommandBufferStub::OnSignalSyncToken(const SyncToken& sync_token, | 1009 void GpuCommandBufferStub::OnSignalSyncToken(const SyncToken& sync_token, |
| 1023 uint32_t id) { | 1010 uint32_t id) { |
| 1024 scoped_refptr<SyncPointClientState> release_state = | 1011 if (!sync_point_client_->WaitNonThreadSafe( |
| 1025 channel_->sync_point_manager()->GetSyncPointClientState( | 1012 sync_token, channel_->task_runner(), |
| 1026 sync_token.namespace_id(), sync_token.command_buffer_id()); | 1013 base::Bind(&GpuCommandBufferStub::OnSignalAck, this->AsWeakPtr(), |
| 1027 | 1014 id))) { |
| 1028 if (release_state) { | |
| 1029 sync_point_client_->Wait(release_state.get(), sync_token.release_count(), | |
| 1030 base::Bind(&GpuCommandBufferStub::OnSignalAck, | |
| 1031 this->AsWeakPtr(), id)); | |
| 1032 } else { | |
| 1033 OnSignalAck(id); | 1015 OnSignalAck(id); |
| 1034 } | 1016 } |
| 1035 } | 1017 } |
| 1036 | 1018 |
| 1037 void GpuCommandBufferStub::OnSignalAck(uint32_t id) { | 1019 void GpuCommandBufferStub::OnSignalAck(uint32_t id) { |
| 1038 Send(new GpuCommandBufferMsg_SignalAck(route_id_, id)); | 1020 Send(new GpuCommandBufferMsg_SignalAck(route_id_, id)); |
| 1039 } | 1021 } |
| 1040 | 1022 |
| 1041 void GpuCommandBufferStub::OnSignalQuery(uint32_t query_id, uint32_t id) { | 1023 void GpuCommandBufferStub::OnSignalQuery(uint32_t query_id, uint32_t id) { |
| 1042 if (decoder_) { | 1024 if (decoder_) { |
| 1043 gles2::QueryManager* query_manager = decoder_->GetQueryManager(); | 1025 gles2::QueryManager* query_manager = decoder_->GetQueryManager(); |
| 1044 if (query_manager) { | 1026 if (query_manager) { |
| 1045 gles2::QueryManager::Query* query = | 1027 gles2::QueryManager::Query* query = |
| 1046 query_manager->GetQuery(query_id); | 1028 query_manager->GetQuery(query_id); |
| 1047 if (query) { | 1029 if (query) { |
| 1048 query->AddCallback( | 1030 query->AddCallback( |
| 1049 base::Bind(&GpuCommandBufferStub::OnSignalAck, | 1031 base::Bind(&GpuCommandBufferStub::OnSignalAck, |
| 1050 this->AsWeakPtr(), | 1032 this->AsWeakPtr(), |
| 1051 id)); | 1033 id)); |
| 1052 return; | 1034 return; |
| 1053 } | 1035 } |
| 1054 } | 1036 } |
| 1055 } | 1037 } |
| 1056 // Something went wrong, run callback immediately. | 1038 // Something went wrong, run callback immediately. |
| 1057 OnSignalAck(id); | 1039 OnSignalAck(id); |
| 1058 } | 1040 } |
| 1059 | 1041 |
| 1060 void GpuCommandBufferStub::OnFenceSyncRelease(uint64_t release) { | 1042 void GpuCommandBufferStub::OnFenceSyncRelease(uint64_t release) { |
| 1061 if (sync_point_client_->client_state()->IsFenceSyncReleased(release)) { | 1043 SyncToken sync_token(CommandBufferNamespace::GPU_IO, 0, command_buffer_id_, |
| 1062 DLOG(ERROR) << "Fence Sync has already been released."; | 1044 release); |
| 1063 return; | 1045 gles2::MailboxManager* mailbox_manager = context_group_->mailbox_manager(); |
| 1064 } | 1046 if (mailbox_manager->UsesSync() && MakeCurrent()) |
| 1065 | |
| 1066 gles2::MailboxManager* mailbox_manager = | |
| 1067 context_group_->mailbox_manager(); | |
| 1068 if (mailbox_manager->UsesSync() && MakeCurrent()) { | |
| 1069 SyncToken sync_token(CommandBufferNamespace::GPU_IO, 0, | |
| 1070 command_buffer_id_, release); | |
| 1071 mailbox_manager->PushTextureUpdates(sync_token); | 1047 mailbox_manager->PushTextureUpdates(sync_token); |
| 1072 } | |
| 1073 | 1048 |
| 1074 command_buffer_->SetReleaseCount(release); | 1049 command_buffer_->SetReleaseCount(release); |
| 1075 sync_point_client_->ReleaseFenceSync(release); | 1050 sync_point_client_->ReleaseFenceSync(release); |
| 1076 } | 1051 } |
| 1077 | 1052 |
| 1078 void GpuCommandBufferStub::OnDescheduleUntilFinished() { | 1053 void GpuCommandBufferStub::OnDescheduleUntilFinished() { |
| 1079 DCHECK(executor_->scheduled()); | 1054 DCHECK(executor_->scheduled()); |
| 1080 DCHECK(executor_->HasPollingWork()); | 1055 DCHECK(executor_->HasPollingWork()); |
| 1081 | 1056 |
| 1082 executor_->SetScheduled(false); | 1057 executor_->SetScheduled(false); |
| 1083 channel_->OnStreamRescheduled(stream_id_, false); | 1058 channel_->OnStreamRescheduled(stream_id_, false); |
| 1084 } | 1059 } |
| 1085 | 1060 |
| 1086 void GpuCommandBufferStub::OnRescheduleAfterFinished() { | 1061 void GpuCommandBufferStub::OnRescheduleAfterFinished() { |
| 1087 DCHECK(!executor_->scheduled()); | 1062 DCHECK(!executor_->scheduled()); |
| 1088 | 1063 |
| 1089 executor_->SetScheduled(true); | 1064 executor_->SetScheduled(true); |
| 1090 channel_->OnStreamRescheduled(stream_id_, true); | 1065 channel_->OnStreamRescheduled(stream_id_, true); |
| 1091 } | 1066 } |
| 1092 | 1067 |
| 1093 bool GpuCommandBufferStub::OnWaitFenceSync( | 1068 bool GpuCommandBufferStub::OnWaitSyncToken(const SyncToken& sync_token) { |
| 1094 CommandBufferNamespace namespace_id, | |
| 1095 CommandBufferId command_buffer_id, | |
| 1096 uint64_t release) { | |
| 1097 DCHECK(!waiting_for_sync_point_); | 1069 DCHECK(!waiting_for_sync_point_); |
| 1098 DCHECK(executor_->scheduled()); | 1070 DCHECK(executor_->scheduled()); |
| 1071 TRACE_EVENT_ASYNC_BEGIN1("gpu", "WaitSyncToken", this, "GpuCommandBufferStub", |
| 1072 this); |
| 1099 | 1073 |
| 1100 scoped_refptr<SyncPointClientState> release_state = | 1074 waiting_for_sync_point_ = sync_point_client_->WaitNonThreadSafe( |
| 1101 channel_->sync_point_manager()->GetSyncPointClientState( | 1075 sync_token, channel_->task_runner(), |
| 1102 namespace_id, command_buffer_id); | 1076 base::Bind(&GpuCommandBufferStub::OnWaitSyncTokenCompleted, AsWeakPtr(), |
| 1077 sync_token)); |
| 1103 | 1078 |
| 1104 if (!release_state) | 1079 if (waiting_for_sync_point_) { |
| 1105 return true; | 1080 executor_->SetScheduled(false); |
| 1106 | 1081 channel_->OnStreamRescheduled(stream_id_, false); |
| 1107 if (release_state->IsFenceSyncReleased(release)) { | |
| 1108 PullTextureUpdates(namespace_id, command_buffer_id, release); | |
| 1109 return true; | 1082 return true; |
| 1110 } | 1083 } |
| 1111 | 1084 |
| 1112 TRACE_EVENT_ASYNC_BEGIN1("gpu", "WaitFenceSync", this, "GpuCommandBufferStub", | 1085 gles2::MailboxManager* mailbox_manager = context_group_->mailbox_manager(); |
| 1113 this); | 1086 if (mailbox_manager->UsesSync() && MakeCurrent()) |
| 1114 waiting_for_sync_point_ = true; | 1087 mailbox_manager->PullTextureUpdates(sync_token); |
| 1115 sync_point_client_->WaitNonThreadSafe( | |
| 1116 release_state.get(), release, channel_->task_runner(), | |
| 1117 base::Bind(&GpuCommandBufferStub::OnWaitFenceSyncCompleted, | |
| 1118 this->AsWeakPtr(), namespace_id, command_buffer_id, release)); | |
| 1119 | |
| 1120 if (!waiting_for_sync_point_) | |
| 1121 return true; | |
| 1122 | |
| 1123 executor_->SetScheduled(false); | |
| 1124 channel_->OnStreamRescheduled(stream_id_, false); | |
| 1125 return false; | 1088 return false; |
| 1126 } | 1089 } |
| 1127 | 1090 |
| 1128 void GpuCommandBufferStub::OnWaitFenceSyncCompleted( | 1091 void GpuCommandBufferStub::OnWaitSyncTokenCompleted( |
| 1129 CommandBufferNamespace namespace_id, | 1092 const SyncToken& sync_token) { |
| 1130 CommandBufferId command_buffer_id, | |
| 1131 uint64_t release) { | |
| 1132 DCHECK(waiting_for_sync_point_); | 1093 DCHECK(waiting_for_sync_point_); |
| 1133 TRACE_EVENT_ASYNC_END1("gpu", "WaitFenceSync", this, "GpuCommandBufferStub", | 1094 TRACE_EVENT_ASYNC_END1("gpu", "WaitSyncTokenCompleted", this, |
| 1134 this); | 1095 "GpuCommandBufferStub", this); |
| 1135 PullTextureUpdates(namespace_id, command_buffer_id, release); | |
| 1136 waiting_for_sync_point_ = false; | 1096 waiting_for_sync_point_ = false; |
| 1097 |
| 1098 gles2::MailboxManager* mailbox_manager = context_group_->mailbox_manager(); |
| 1099 if (mailbox_manager->UsesSync() && MakeCurrent()) |
| 1100 mailbox_manager->PullTextureUpdates(sync_token); |
| 1101 |
| 1137 executor_->SetScheduled(true); | 1102 executor_->SetScheduled(true); |
| 1138 channel_->OnStreamRescheduled(stream_id_, true); | 1103 channel_->OnStreamRescheduled(stream_id_, true); |
| 1139 } | 1104 } |
| 1140 | 1105 |
| 1141 void GpuCommandBufferStub::OnCreateImage( | 1106 void GpuCommandBufferStub::OnCreateImage( |
| 1142 const GpuCommandBufferMsg_CreateImage_Params& params) { | 1107 const GpuCommandBufferMsg_CreateImage_Params& params) { |
| 1143 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnCreateImage"); | 1108 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnCreateImage"); |
| 1144 const int32_t id = params.id; | 1109 const int32_t id = params.id; |
| 1145 const gfx::GpuMemoryBufferHandle& handle = params.gpu_memory_buffer; | 1110 const gfx::GpuMemoryBufferHandle& handle = params.gpu_memory_buffer; |
| 1146 const gfx::Size& size = params.size; | 1111 const gfx::Size& size = params.size; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1174 LOG(ERROR) << "Incompatible image format."; | 1139 LOG(ERROR) << "Incompatible image format."; |
| 1175 return; | 1140 return; |
| 1176 } | 1141 } |
| 1177 | 1142 |
| 1178 scoped_refptr<gl::GLImage> image = channel()->CreateImageForGpuMemoryBuffer( | 1143 scoped_refptr<gl::GLImage> image = channel()->CreateImageForGpuMemoryBuffer( |
| 1179 handle, size, format, internalformat, surface_handle_); | 1144 handle, size, format, internalformat, surface_handle_); |
| 1180 if (!image.get()) | 1145 if (!image.get()) |
| 1181 return; | 1146 return; |
| 1182 | 1147 |
| 1183 image_manager->AddImage(image.get(), id); | 1148 image_manager->AddImage(image.get(), id); |
| 1184 if (image_release_count) { | 1149 if (image_release_count) |
| 1185 DLOG_IF(ERROR, | |
| 1186 image_release_count != | |
| 1187 sync_point_client_->client_state()->fence_sync_release() + 1) | |
| 1188 << "Client released fences out of order."; | |
| 1189 sync_point_client_->ReleaseFenceSync(image_release_count); | 1150 sync_point_client_->ReleaseFenceSync(image_release_count); |
| 1190 } | |
| 1191 } | 1151 } |
| 1192 | 1152 |
| 1193 void GpuCommandBufferStub::OnDestroyImage(int32_t id) { | 1153 void GpuCommandBufferStub::OnDestroyImage(int32_t id) { |
| 1194 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnDestroyImage"); | 1154 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnDestroyImage"); |
| 1195 | 1155 |
| 1196 if (!decoder_) | 1156 if (!decoder_) |
| 1197 return; | 1157 return; |
| 1198 | 1158 |
| 1199 gles2::ImageManager* image_manager = decoder_->GetImageManager(); | 1159 gles2::ImageManager* image_manager = decoder_->GetImageManager(); |
| 1200 DCHECK(image_manager); | 1160 DCHECK(image_manager); |
| 1201 if (!image_manager->LookupImage(id)) { | 1161 if (!image_manager->LookupImage(id)) { |
| 1202 LOG(ERROR) << "Image with ID doesn't exist."; | 1162 LOG(ERROR) << "Image with ID doesn't exist."; |
| 1203 return; | 1163 return; |
| 1204 } | 1164 } |
| 1205 | 1165 |
| 1206 image_manager->RemoveImage(id); | 1166 image_manager->RemoveImage(id); |
| 1207 } | 1167 } |
| 1208 | 1168 |
| 1209 void GpuCommandBufferStub::SendConsoleMessage(int32_t id, | 1169 void GpuCommandBufferStub::SendConsoleMessage(int32_t id, |
| 1210 const std::string& message) { | 1170 const std::string& message) { |
| 1211 GPUCommandBufferConsoleMessage console_message; | 1171 GPUCommandBufferConsoleMessage console_message; |
| 1212 console_message.id = id; | 1172 console_message.id = id; |
| 1213 console_message.message = message; | 1173 console_message.message = message; |
| 1214 IPC::Message* msg = new GpuCommandBufferMsg_ConsoleMsg( | 1174 IPC::Message* msg = |
| 1215 route_id_, console_message); | 1175 new GpuCommandBufferMsg_ConsoleMsg(route_id_, console_message); |
| 1216 msg->set_unblock(true); | 1176 msg->set_unblock(true); |
| 1217 Send(msg); | 1177 Send(msg); |
| 1218 } | 1178 } |
| 1219 | 1179 |
| 1220 void GpuCommandBufferStub::SendCachedShader( | 1180 void GpuCommandBufferStub::SendCachedShader(const std::string& key, |
| 1221 const std::string& key, const std::string& shader) { | 1181 const std::string& shader) { |
| 1222 channel_->CacheShader(key, shader); | 1182 channel_->CacheShader(key, shader); |
| 1223 } | 1183 } |
| 1224 | 1184 |
| 1225 void GpuCommandBufferStub::AddDestructionObserver( | 1185 void GpuCommandBufferStub::AddDestructionObserver( |
| 1226 DestructionObserver* observer) { | 1186 DestructionObserver* observer) { |
| 1227 destruction_observers_.AddObserver(observer); | 1187 destruction_observers_.AddObserver(observer); |
| 1228 } | 1188 } |
| 1229 | 1189 |
| 1230 void GpuCommandBufferStub::RemoveDestructionObserver( | 1190 void GpuCommandBufferStub::RemoveDestructionObserver( |
| 1231 DestructionObserver* observer) { | 1191 DestructionObserver* observer) { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1269 command_buffer_->GetLastState().error == error::kLostContext) | 1229 command_buffer_->GetLastState().error == error::kLostContext) |
| 1270 return; | 1230 return; |
| 1271 | 1231 |
| 1272 command_buffer_->SetContextLostReason(error::kUnknown); | 1232 command_buffer_->SetContextLostReason(error::kUnknown); |
| 1273 if (decoder_) | 1233 if (decoder_) |
| 1274 decoder_->MarkContextLost(error::kUnknown); | 1234 decoder_->MarkContextLost(error::kUnknown); |
| 1275 command_buffer_->SetParseError(error::kLostContext); | 1235 command_buffer_->SetParseError(error::kLostContext); |
| 1276 } | 1236 } |
| 1277 | 1237 |
| 1278 } // namespace gpu | 1238 } // namespace gpu |
| OLD | NEW |