| 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 "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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 ~DevToolsChannelData() override {} | 142 ~DevToolsChannelData() override {} |
| 143 scoped_ptr<base::Value> value_; | 143 scoped_ptr<base::Value> value_; |
| 144 DISALLOW_COPY_AND_ASSIGN(DevToolsChannelData); | 144 DISALLOW_COPY_AND_ASSIGN(DevToolsChannelData); |
| 145 }; | 145 }; |
| 146 | 146 |
| 147 scoped_refptr<base::trace_event::ConvertableToTraceFormat> | 147 scoped_refptr<base::trace_event::ConvertableToTraceFormat> |
| 148 DevToolsChannelData::CreateForChannel(GpuChannel* channel) { | 148 DevToolsChannelData::CreateForChannel(GpuChannel* channel) { |
| 149 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue); | 149 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue); |
| 150 res->SetInteger("renderer_pid", channel->GetClientPID()); | 150 res->SetInteger("renderer_pid", channel->GetClientPID()); |
| 151 res->SetDouble("used_bytes", channel->GetMemoryUsage()); | 151 res->SetDouble("used_bytes", channel->GetMemoryUsage()); |
| 152 res->SetDouble("limit_bytes", | |
| 153 channel->gpu_channel_manager() | |
| 154 ->gpu_memory_manager() | |
| 155 ->GetMaximumClientAllocation()); | |
| 156 return new DevToolsChannelData(res.release()); | 152 return new DevToolsChannelData(res.release()); |
| 157 } | 153 } |
| 158 | 154 |
| 159 void RunOnThread(scoped_refptr<base::SingleThreadTaskRunner> task_runner, | 155 void RunOnThread(scoped_refptr<base::SingleThreadTaskRunner> task_runner, |
| 160 const base::Closure& callback) { | 156 const base::Closure& callback) { |
| 161 if (task_runner->BelongsToCurrentThread()) { | 157 if (task_runner->BelongsToCurrentThread()) { |
| 162 callback.Run(); | 158 callback.Run(); |
| 163 } else { | 159 } else { |
| 164 task_runner->PostTask(FROM_HERE, callback); | 160 task_runner->PostTask(FROM_HERE, callback); |
| 165 } | 161 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 use_virtualized_gl_context_(false), | 198 use_virtualized_gl_context_(false), |
| 203 command_buffer_id_(GetCommandBufferID(channel->client_id(), route_id)), | 199 command_buffer_id_(GetCommandBufferID(channel->client_id(), route_id)), |
| 204 stream_id_(stream_id), | 200 stream_id_(stream_id), |
| 205 route_id_(route_id), | 201 route_id_(route_id), |
| 206 offscreen_(offscreen), | 202 offscreen_(offscreen), |
| 207 last_flush_count_(0), | 203 last_flush_count_(0), |
| 208 watchdog_(watchdog), | 204 watchdog_(watchdog), |
| 209 waiting_for_sync_point_(false), | 205 waiting_for_sync_point_(false), |
| 210 previous_processed_num_(0), | 206 previous_processed_num_(0), |
| 211 preemption_flag_(preempt_by_flag), | 207 preemption_flag_(preempt_by_flag), |
| 212 active_url_(active_url), | 208 active_url_(active_url) { |
| 213 total_gpu_memory_(0) { | |
| 214 active_url_hash_ = base::Hash(active_url.possibly_invalid_spec()); | 209 active_url_hash_ = base::Hash(active_url.possibly_invalid_spec()); |
| 215 FastSetActiveURL(active_url_, active_url_hash_); | 210 FastSetActiveURL(active_url_, active_url_hash_); |
| 216 | 211 |
| 217 gpu::gles2::ContextCreationAttribHelper attrib_parser; | 212 gpu::gles2::ContextCreationAttribHelper attrib_parser; |
| 218 attrib_parser.Parse(requested_attribs_); | 213 attrib_parser.Parse(requested_attribs_); |
| 219 | 214 |
| 220 if (share_group) { | 215 if (share_group) { |
| 221 context_group_ = share_group->context_group_; | 216 context_group_ = share_group->context_group_; |
| 222 DCHECK(context_group_->bind_generates_resource() == | 217 DCHECK(context_group_->bind_generates_resource() == |
| 223 attrib_parser.bind_generates_resource); | 218 attrib_parser.bind_generates_resource); |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 LOG(ERROR) << "Failed to make context current."; | 599 LOG(ERROR) << "Failed to make context current."; |
| 605 OnInitializeFailed(reply_message); | 600 OnInitializeFailed(reply_message); |
| 606 return; | 601 return; |
| 607 } | 602 } |
| 608 | 603 |
| 609 if (!context->GetGLStateRestorer()) { | 604 if (!context->GetGLStateRestorer()) { |
| 610 context->SetGLStateRestorer( | 605 context->SetGLStateRestorer( |
| 611 new gpu::GLStateRestorerImpl(decoder_->AsWeakPtr())); | 606 new gpu::GLStateRestorerImpl(decoder_->AsWeakPtr())); |
| 612 } | 607 } |
| 613 | 608 |
| 614 if (!context->GetTotalGpuMemory(&total_gpu_memory_)) | |
| 615 total_gpu_memory_ = 0; | |
| 616 | |
| 617 if (!context_group_->has_program_cache() && | 609 if (!context_group_->has_program_cache() && |
| 618 !context_group_->feature_info()->workarounds().disable_program_cache) { | 610 !context_group_->feature_info()->workarounds().disable_program_cache) { |
| 619 context_group_->set_program_cache( | 611 context_group_->set_program_cache( |
| 620 channel_->gpu_channel_manager()->program_cache()); | 612 channel_->gpu_channel_manager()->program_cache()); |
| 621 } | 613 } |
| 622 | 614 |
| 623 // Initialize the decoder with either the view or pbuffer GLContext. | 615 // Initialize the decoder with either the view or pbuffer GLContext. |
| 624 if (!decoder_->Initialize(surface_, context, offscreen_, initial_size_, | 616 if (!decoder_->Initialize(surface_, context, offscreen_, initial_size_, |
| 625 disallowed_features_, requested_attribs_)) { | 617 disallowed_features_, requested_attribs_)) { |
| 626 DLOG(ERROR) << "Failed to initialize decoder."; | 618 DLOG(ERROR) << "Failed to initialize decoder."; |
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 void GpuCommandBufferStub::AddDestructionObserver( | 1184 void GpuCommandBufferStub::AddDestructionObserver( |
| 1193 DestructionObserver* observer) { | 1185 DestructionObserver* observer) { |
| 1194 destruction_observers_.AddObserver(observer); | 1186 destruction_observers_.AddObserver(observer); |
| 1195 } | 1187 } |
| 1196 | 1188 |
| 1197 void GpuCommandBufferStub::RemoveDestructionObserver( | 1189 void GpuCommandBufferStub::RemoveDestructionObserver( |
| 1198 DestructionObserver* observer) { | 1190 DestructionObserver* observer) { |
| 1199 destruction_observers_.RemoveObserver(observer); | 1191 destruction_observers_.RemoveObserver(observer); |
| 1200 } | 1192 } |
| 1201 | 1193 |
| 1202 bool GpuCommandBufferStub::GetTotalGpuMemory(uint64* bytes) { | |
| 1203 *bytes = total_gpu_memory_; | |
| 1204 return !!total_gpu_memory_; | |
| 1205 } | |
| 1206 | |
| 1207 gfx::Size GpuCommandBufferStub::GetSurfaceSize() const { | |
| 1208 if (!surface_.get()) | |
| 1209 return gfx::Size(); | |
| 1210 return surface_->GetSize(); | |
| 1211 } | |
| 1212 | |
| 1213 const gpu::gles2::FeatureInfo* GpuCommandBufferStub::GetFeatureInfo() const { | 1194 const gpu::gles2::FeatureInfo* GpuCommandBufferStub::GetFeatureInfo() const { |
| 1214 return context_group_->feature_info(); | 1195 return context_group_->feature_info(); |
| 1215 } | 1196 } |
| 1216 | 1197 |
| 1217 gpu::gles2::MemoryTracker* GpuCommandBufferStub::GetMemoryTracker() const { | 1198 gpu::gles2::MemoryTracker* GpuCommandBufferStub::GetMemoryTracker() const { |
| 1218 return context_group_->memory_tracker(); | 1199 return context_group_->memory_tracker(); |
| 1219 } | 1200 } |
| 1220 | 1201 |
| 1221 void GpuCommandBufferStub::SuggestHaveFrontBuffer( | |
| 1222 bool suggest_have_frontbuffer) { | |
| 1223 // This can be called outside of OnMessageReceived, so the context needs | |
| 1224 // to be made current before calling methods on the surface. | |
| 1225 if (surface_.get() && MakeCurrent()) | |
| 1226 surface_->SetFrontbufferAllocation(suggest_have_frontbuffer); | |
| 1227 } | |
| 1228 | |
| 1229 bool GpuCommandBufferStub::CheckContextLost() { | 1202 bool GpuCommandBufferStub::CheckContextLost() { |
| 1230 DCHECK(command_buffer_); | 1203 DCHECK(command_buffer_); |
| 1231 gpu::CommandBuffer::State state = command_buffer_->GetLastState(); | 1204 gpu::CommandBuffer::State state = command_buffer_->GetLastState(); |
| 1232 bool was_lost = state.error == gpu::error::kLostContext; | 1205 bool was_lost = state.error == gpu::error::kLostContext; |
| 1233 | 1206 |
| 1234 if (was_lost) { | 1207 if (was_lost) { |
| 1235 bool was_lost_by_robustness = | 1208 bool was_lost_by_robustness = |
| 1236 decoder_ && decoder_->WasContextLostByRobustnessExtension(); | 1209 decoder_ && decoder_->WasContextLostByRobustnessExtension(); |
| 1237 | 1210 |
| 1238 // Work around issues with recovery by allowing a new GPU process to launch. | 1211 // Work around issues with recovery by allowing a new GPU process to launch. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1281 result)); | 1254 result)); |
| 1282 } | 1255 } |
| 1283 | 1256 |
| 1284 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase, | 1257 void GpuCommandBufferStub::SendUpdateVSyncParameters(base::TimeTicks timebase, |
| 1285 base::TimeDelta interval) { | 1258 base::TimeDelta interval) { |
| 1286 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase, | 1259 Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase, |
| 1287 interval)); | 1260 interval)); |
| 1288 } | 1261 } |
| 1289 | 1262 |
| 1290 } // namespace content | 1263 } // namespace content |
| OLD | NEW |