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

Side by Side Diff: gpu/ipc/service/gpu_command_buffer_stub.cc

Issue 2722883002: gpu: Allow waiting on sync tokens without sync token client. (Closed)
Patch Set: review Created 3 years, 9 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 | « gpu/ipc/service/gpu_command_buffer_stub.h ('k') | services/ui/gpu/gpu_service.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 "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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « gpu/ipc/service/gpu_command_buffer_stub.h ('k') | services/ui/gpu/gpu_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698