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

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

Issue 1324413003: Move gpu memory calculations to Compositor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comment + android_arm64_dbg_recipe bot issue. Created 5 years, 2 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 | « content/common/gpu/gpu_command_buffer_stub.h ('k') | content/common/gpu/gpu_memory_manager.h » ('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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/hash.h" 8 #include "base/hash.h"
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 initial_size_(size), 198 initial_size_(size),
199 disallowed_features_(disallowed_features), 199 disallowed_features_(disallowed_features),
200 requested_attribs_(attribs), 200 requested_attribs_(attribs),
201 gpu_preference_(gpu_preference), 201 gpu_preference_(gpu_preference),
202 use_virtualized_gl_context_(false), 202 use_virtualized_gl_context_(false),
203 command_buffer_id_(GetCommandBufferID(channel->client_id(), route_id)), 203 command_buffer_id_(GetCommandBufferID(channel->client_id(), route_id)),
204 stream_id_(stream_id), 204 stream_id_(stream_id),
205 route_id_(route_id), 205 route_id_(route_id),
206 offscreen_(offscreen), 206 offscreen_(offscreen),
207 last_flush_count_(0), 207 last_flush_count_(0),
208 last_memory_allocation_valid_(false),
209 watchdog_(watchdog), 208 watchdog_(watchdog),
210 waiting_for_sync_point_(false), 209 waiting_for_sync_point_(false),
211 previous_processed_num_(0), 210 previous_processed_num_(0),
212 preemption_flag_(preempt_by_flag), 211 preemption_flag_(preempt_by_flag),
213 active_url_(active_url), 212 active_url_(active_url),
214 total_gpu_memory_(0) { 213 total_gpu_memory_(0) {
215 active_url_hash_ = base::Hash(active_url.possibly_invalid_spec()); 214 active_url_hash_ = base::Hash(active_url.possibly_invalid_spec());
216 FastSetActiveURL(active_url_, active_url_hash_); 215 FastSetActiveURL(active_url_, active_url_hash_);
217 216
218 gpu::gles2::ContextCreationAttribHelper attrib_parser; 217 gpu::gles2::ContextCreationAttribHelper attrib_parser;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 // messages directed at the command buffer. This ensures that the message 270 // messages directed at the command buffer. This ensures that the message
272 // handler can assume that the context is current (not necessary for 271 // handler can assume that the context is current (not necessary for
273 // RetireSyncPoint or WaitSyncPoint). 272 // RetireSyncPoint or WaitSyncPoint).
274 if (decoder_.get() && 273 if (decoder_.get() &&
275 message.type() != GpuCommandBufferMsg_SetGetBuffer::ID && 274 message.type() != GpuCommandBufferMsg_SetGetBuffer::ID &&
276 message.type() != GpuCommandBufferMsg_WaitForTokenInRange::ID && 275 message.type() != GpuCommandBufferMsg_WaitForTokenInRange::ID &&
277 message.type() != GpuCommandBufferMsg_WaitForGetOffsetInRange::ID && 276 message.type() != GpuCommandBufferMsg_WaitForGetOffsetInRange::ID &&
278 message.type() != GpuCommandBufferMsg_RegisterTransferBuffer::ID && 277 message.type() != GpuCommandBufferMsg_RegisterTransferBuffer::ID &&
279 message.type() != GpuCommandBufferMsg_DestroyTransferBuffer::ID && 278 message.type() != GpuCommandBufferMsg_DestroyTransferBuffer::ID &&
280 message.type() != GpuCommandBufferMsg_RetireSyncPoint::ID && 279 message.type() != GpuCommandBufferMsg_RetireSyncPoint::ID &&
281 message.type() != GpuCommandBufferMsg_SignalSyncPoint::ID && 280 message.type() != GpuCommandBufferMsg_SignalSyncPoint::ID) {
282 message.type() !=
283 GpuCommandBufferMsg_SetClientHasMemoryAllocationChangedCallback::ID) {
284 if (!MakeCurrent()) 281 if (!MakeCurrent())
285 return false; 282 return false;
286 have_context = true; 283 have_context = true;
287 } 284 }
288 285
289 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers 286 // Always use IPC_MESSAGE_HANDLER_DELAY_REPLY for synchronous message handlers
290 // here. This is so the reply can be delayed if the scheduler is unscheduled. 287 // here. This is so the reply can be delayed if the scheduler is unscheduled.
291 bool handled = true; 288 bool handled = true;
292 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message) 289 IPC_BEGIN_MESSAGE_MAP(GpuCommandBufferStub, message)
293 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_Initialize, 290 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_Initialize,
(...skipping 16 matching lines...) Expand all
310 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_CreateVideoEncoder, 307 IPC_MESSAGE_HANDLER_DELAY_REPLY(GpuCommandBufferMsg_CreateVideoEncoder,
311 OnCreateVideoEncoder) 308 OnCreateVideoEncoder)
312 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SetSurfaceVisible, 309 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SetSurfaceVisible,
313 OnSetSurfaceVisible) 310 OnSetSurfaceVisible)
314 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_RetireSyncPoint, 311 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_RetireSyncPoint,
315 OnRetireSyncPoint) 312 OnRetireSyncPoint)
316 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalSyncPoint, 313 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalSyncPoint,
317 OnSignalSyncPoint) 314 OnSignalSyncPoint)
318 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalQuery, 315 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalQuery,
319 OnSignalQuery) 316 OnSignalQuery)
320 IPC_MESSAGE_HANDLER(
321 GpuCommandBufferMsg_SetClientHasMemoryAllocationChangedCallback,
322 OnSetClientHasMemoryAllocationChangedCallback)
323 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_CreateImage, OnCreateImage); 317 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_CreateImage, OnCreateImage);
324 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_DestroyImage, OnDestroyImage); 318 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_DestroyImage, OnDestroyImage);
325 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_CreateStreamTexture, 319 IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_CreateStreamTexture,
326 OnCreateStreamTexture) 320 OnCreateStreamTexture)
327 IPC_MESSAGE_UNHANDLED(handled = false) 321 IPC_MESSAGE_UNHANDLED(handled = false)
328 IPC_END_MESSAGE_MAP() 322 IPC_END_MESSAGE_MAP()
329 323
330 CheckCompleteWaits(); 324 CheckCompleteWaits();
331 325
332 // Ensure that any delayed work that was created will be handled. 326 // Ensure that any delayed work that was created will be handled.
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 } 464 }
471 465
472 if (initialized_) { 466 if (initialized_) {
473 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager(); 467 GpuChannelManager* gpu_channel_manager = channel_->gpu_channel_manager();
474 if (handle_.is_null() && !active_url_.is_empty()) { 468 if (handle_.is_null() && !active_url_.is_empty()) {
475 gpu_channel_manager->Send( 469 gpu_channel_manager->Send(
476 new GpuHostMsg_DidDestroyOffscreenContext(active_url_)); 470 new GpuHostMsg_DidDestroyOffscreenContext(active_url_));
477 } 471 }
478 } 472 }
479 473
480 memory_manager_client_state_.reset();
481
482 while (!sync_points_.empty()) 474 while (!sync_points_.empty())
483 OnRetireSyncPoint(sync_points_.front()); 475 OnRetireSyncPoint(sync_points_.front());
484 476
485 if (decoder_) 477 if (decoder_)
486 decoder_->set_engine(NULL); 478 decoder_->set_engine(NULL);
487 479
488 // The scheduler has raw references to the decoder and the command buffer so 480 // The scheduler has raw references to the decoder and the command buffer so
489 // destroy it before those. 481 // destroy it before those.
490 scheduler_.reset(); 482 scheduler_.reset();
491 483
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 new GpuVideoEncodeAccelerator(encoder_route_id, this); 909 new GpuVideoEncodeAccelerator(encoder_route_id, this);
918 encoder->Initialize(input_format, 910 encoder->Initialize(input_format,
919 input_visible_size, 911 input_visible_size,
920 output_profile, 912 output_profile,
921 initial_bitrate, 913 initial_bitrate,
922 reply_message); 914 reply_message);
923 // encoder is registered as a DestructionObserver of this stub and will 915 // encoder is registered as a DestructionObserver of this stub and will
924 // self-delete during destruction of this stub. 916 // self-delete during destruction of this stub.
925 } 917 }
926 918
919 // TODO(sohanjg): cleanup this and the client side too.
927 void GpuCommandBufferStub::OnSetSurfaceVisible(bool visible) { 920 void GpuCommandBufferStub::OnSetSurfaceVisible(bool visible) {
928 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnSetSurfaceVisible"); 921 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnSetSurfaceVisible");
929 if (memory_manager_client_state_)
930 memory_manager_client_state_->SetVisible(visible);
931 } 922 }
932 923
933 void GpuCommandBufferStub::AddSyncPoint(uint32 sync_point, bool retire) { 924 void GpuCommandBufferStub::AddSyncPoint(uint32 sync_point, bool retire) {
934 sync_points_.push_back(sync_point); 925 sync_points_.push_back(sync_point);
935 if (retire) 926 if (retire)
936 OnRetireSyncPoint(sync_point); 927 OnRetireSyncPoint(sync_point);
937 } 928 }
938 929
939 void GpuCommandBufferStub::OnRetireSyncPoint(uint32 sync_point) { 930 void GpuCommandBufferStub::OnRetireSyncPoint(uint32 sync_point) {
940 DCHECK(!sync_points_.empty() && sync_points_.front() == sync_point); 931 DCHECK(!sync_points_.empty() && sync_points_.front() == sync_point);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1015 this->AsWeakPtr(), 1006 this->AsWeakPtr(),
1016 id)); 1007 id));
1017 return; 1008 return;
1018 } 1009 }
1019 } 1010 }
1020 } 1011 }
1021 // Something went wrong, run callback immediately. 1012 // Something went wrong, run callback immediately.
1022 OnSignalSyncPointAck(id); 1013 OnSignalSyncPointAck(id);
1023 } 1014 }
1024 1015
1025
1026 void GpuCommandBufferStub::OnSetClientHasMemoryAllocationChangedCallback(
1027 bool has_callback) {
1028 TRACE_EVENT0(
1029 "gpu",
1030 "GpuCommandBufferStub::OnSetClientHasMemoryAllocationChangedCallback");
1031 if (has_callback) {
1032 if (!memory_manager_client_state_) {
1033 memory_manager_client_state_.reset(
1034 GetMemoryManager()->CreateClientState(this, !offscreen_, true));
1035 }
1036 } else {
1037 memory_manager_client_state_.reset();
1038 }
1039 }
1040
1041 void GpuCommandBufferStub::OnCreateImage(int32 id, 1016 void GpuCommandBufferStub::OnCreateImage(int32 id,
1042 gfx::GpuMemoryBufferHandle handle, 1017 gfx::GpuMemoryBufferHandle handle,
1043 gfx::Size size, 1018 gfx::Size size,
1044 gfx::BufferFormat format, 1019 gfx::BufferFormat format,
1045 uint32 internalformat) { 1020 uint32 internalformat) {
1046 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnCreateImage"); 1021 TRACE_EVENT0("gpu", "GpuCommandBufferStub::OnCreateImage");
1047 1022
1048 if (!decoder_) 1023 if (!decoder_)
1049 return; 1024 return;
1050 1025
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1136 } 1111 }
1137 1112
1138 const gpu::gles2::FeatureInfo* GpuCommandBufferStub::GetFeatureInfo() const { 1113 const gpu::gles2::FeatureInfo* GpuCommandBufferStub::GetFeatureInfo() const {
1139 return context_group_->feature_info(); 1114 return context_group_->feature_info();
1140 } 1115 }
1141 1116
1142 gpu::gles2::MemoryTracker* GpuCommandBufferStub::GetMemoryTracker() const { 1117 gpu::gles2::MemoryTracker* GpuCommandBufferStub::GetMemoryTracker() const {
1143 return context_group_->memory_tracker(); 1118 return context_group_->memory_tracker();
1144 } 1119 }
1145 1120
1146 void GpuCommandBufferStub::SetMemoryAllocation(
1147 const gpu::MemoryAllocation& allocation) {
1148 if (!last_memory_allocation_valid_ ||
1149 !allocation.Equals(last_memory_allocation_)) {
1150 Send(new GpuCommandBufferMsg_SetMemoryAllocation(
1151 route_id_, allocation));
1152 }
1153
1154 last_memory_allocation_valid_ = true;
1155 last_memory_allocation_ = allocation;
1156 }
1157
1158 void GpuCommandBufferStub::SuggestHaveFrontBuffer( 1121 void GpuCommandBufferStub::SuggestHaveFrontBuffer(
1159 bool suggest_have_frontbuffer) { 1122 bool suggest_have_frontbuffer) {
1160 // This can be called outside of OnMessageReceived, so the context needs 1123 // This can be called outside of OnMessageReceived, so the context needs
1161 // to be made current before calling methods on the surface. 1124 // to be made current before calling methods on the surface.
1162 if (surface_.get() && MakeCurrent()) 1125 if (surface_.get() && MakeCurrent())
1163 surface_->SetFrontbufferAllocation(suggest_have_frontbuffer); 1126 surface_->SetFrontbufferAllocation(suggest_have_frontbuffer);
1164 } 1127 }
1165 1128
1166 bool GpuCommandBufferStub::CheckContextLost() { 1129 bool GpuCommandBufferStub::CheckContextLost() {
1167 DCHECK(command_buffer_); 1130 DCHECK(command_buffer_);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 result)); 1181 result));
1219 } 1182 }
1220 1183
1221 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase, 1184 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase,
1222 base::TimeDelta interval) { 1185 base::TimeDelta interval) {
1223 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase, 1186 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase,
1224 interval)); 1187 interval));
1225 } 1188 }
1226 1189
1227 } // namespace content 1190 } // namespace content
OLDNEW
« no previous file with comments | « content/common/gpu/gpu_command_buffer_stub.h ('k') | content/common/gpu/gpu_memory_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698