summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/mocks.cc
diff options
context:
space:
mode:
authorjbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-03 23:19:30 +0000
committerjbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-03 23:19:30 +0000
commitd6ca9a3a0c76deb0723789d2844e028cf7fa419d (patch)
tree9373b7e4e04e7e1a79b24aad37d1570f1a1fa0f3 /gpu/command_buffer/service/mocks.cc
parent0f25bfdf7a60ff20d3b3d7572065fe1250bd6bd0 (diff)
downloadchromium_src-d6ca9a3a0c76deb0723789d2844e028cf7fa419d.zip
chromium_src-d6ca9a3a0c76deb0723789d2844e028cf7fa419d.tar.gz
chromium_src-d6ca9a3a0c76deb0723789d2844e028cf7fa419d.tar.bz2
GpuScheduler fix:
- Ganesh generates a lot of cheap GL commands, so 100 commands were executing in 50us, causing us to spin on PostTask(ProcessCommands) 60+ times per frame. This change simply tracks the elapsed time after each 100 commands - if the time is less than 2ms, it continues on to the next 100 commands. BUG=83628 TEST=trace FishIE demo with 500 fish, check that ProcessCommands is not called ~60 times per frame. Review URL: http://codereview.chromium.org/6993032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@87895 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/mocks.cc')
-rw-r--r--gpu/command_buffer/service/mocks.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/gpu/command_buffer/service/mocks.cc b/gpu/command_buffer/service/mocks.cc
index 40b3d6d9..70898b3 100644
--- a/gpu/command_buffer/service/mocks.cc
+++ b/gpu/command_buffer/service/mocks.cc
@@ -2,6 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/threading/thread.h"
+#include "base/time.h"
+#include "gpu/command_buffer/service/gpu_scheduler.h"
#include "gpu/command_buffer/service/mocks.h"
namespace gpu {
@@ -24,6 +27,25 @@ void AsyncAPIMock::SetToken(unsigned int command,
engine_->set_token(args->token);
}
+SpecializedDoCommandAsyncAPIMock::SpecializedDoCommandAsyncAPIMock() {}
+
+SpecializedDoCommandAsyncAPIMock::~SpecializedDoCommandAsyncAPIMock() {}
+
+error::Error SpecializedDoCommandAsyncAPIMock::DoCommand(
+ unsigned int command,
+ unsigned int arg_count,
+ const void* cmd_data) {
+ if (command == kTestQuantumCommand) {
+ // Surpass the GpuScheduler scheduling quantum.
+ base::TimeTicks start_time = base::TimeTicks::Now();
+ while ((base::TimeTicks::Now() - start_time).InMicroseconds() <
+ GpuScheduler::kMinimumSchedulerQuantumMicros) {
+ base::PlatformThread::Sleep(1);
+ }
+ }
+ return AsyncAPIMock::DoCommand(command, arg_count, cmd_data);
+}
+
namespace gles2 {
MockShaderTranslator::MockShaderTranslator() {}