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

Unified Diff: ui/gl/gpu_timing.cc

Issue 1233233002: Added support for TimeStamp queries using QueryCounterEXT. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed unit test Created 5 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: ui/gl/gpu_timing.cc
diff --git a/ui/gl/gpu_timing.cc b/ui/gl/gpu_timing.cc
index c90225434d6fddbcdc42cbe8306ab2ef98186ca2..30037c618dc3cfcc7cc8a53f381455f1be812fc1 100644
--- a/ui/gl/gpu_timing.cc
+++ b/ui/gl/gpu_timing.cc
@@ -313,6 +313,7 @@ GPUTimingImpl::GPUTimingImpl(GLContextReal* context) {
timer_type_ = GPUTiming::kTimerTypeARB;
} else if (context->HasExtension("GL_EXT_timer_query")) {
timer_type_ = GPUTiming::kTimerTypeEXT;
+ force_time_elapsed_query_ = true;
}
}
@@ -375,8 +376,7 @@ void GPUTimingImpl::EndElapsedTimeQuery(scoped_refptr<QueryResult> result) {
}
scoped_refptr<QueryResult> GPUTimingImpl::DoTimeStampQuery() {
- DCHECK(timer_type_ == GPUTiming::kTimerTypeDisjoint ||
- timer_type_ == GPUTiming::kTimerTypeARB);
+ DCHECK(timer_type_ != GPUTiming::kTimerTypeInvalid);
if (force_time_elapsed_query_) {
// Replace with elapsed timer queries instead.
@@ -476,8 +476,18 @@ void GPUTimer::Destroy(bool have_context) {
}
}
+void GPUTimer::QueryTimeStamp() {
+ DCHECK(!end_requested_);
piman 2015/07/16 01:05:53 We can QueryCounter multiple times on the same que
David Yen 2015/07/16 20:21:12 Ah yes, GPUTimer has originally always been one us
+ DCHECK(gpu_timing_client_->gpu_timing_);
+ DCHECK(!time_stamp_result_.get() && !elapsed_timer_result_.get());
piman 2015/07/16 01:05:53 same here.
David Yen 2015/07/16 20:21:12 Done.
+ end_requested_ = true;
+ time_stamp_result_ = gpu_timing_client_->gpu_timing_->DoTimeStampQuery();
+}
+
void GPUTimer::Start() {
+ DCHECK(!end_requested_);
piman 2015/07/16 01:05:53 Is this valid? It looks like for the GL_TIME_ELAPS
David Yen 2015/07/16 20:21:12 Done.
DCHECK(gpu_timing_client_->gpu_timing_);
+ DCHECK(!time_stamp_result_.get() && !elapsed_timer_result_.get());
piman 2015/07/16 01:05:53 Same here wrt !elapsed_timer_result_.get()
David Yen 2015/07/16 20:21:12 Done.
if (!use_elapsed_timer_)
time_stamp_result_ = gpu_timing_client_->gpu_timing_->DoTimeStampQuery();
@@ -486,6 +496,7 @@ void GPUTimer::Start() {
}
void GPUTimer::End() {
+ DCHECK(!end_requested_);
DCHECK(elapsed_timer_result_.get());
end_requested_ = true;
gpu_timing_client_->gpu_timing_->EndElapsedTimeQuery(elapsed_timer_result_);
@@ -495,12 +506,17 @@ bool GPUTimer::IsAvailable() {
if (!end_requested_)
return false;
if (!end_available_) {
- DCHECK(elapsed_timer_result_.get());
- if (elapsed_timer_result_->IsAvailable()) {
- end_available_ = true;
+ scoped_refptr<QueryResult> result =
+ elapsed_timer_result_.get() ?
+ elapsed_timer_result_ :
+ time_stamp_result_;
+
+ DCHECK(result.get());
+ if (result->IsAvailable()) {
+ end_available_ = true;
piman 2015/07/16 01:05:53 nit: indent looks wrong
David Yen 2015/07/16 20:21:12 No longer relevant as this section has been rewrit
} else {
gpu_timing_client_->gpu_timing_->UpdateQueryResults();
- end_available_ = elapsed_timer_result_->IsAvailable();
+ end_available_ = result->IsAvailable();
}
}
return end_available_;
@@ -508,24 +524,24 @@ bool GPUTimer::IsAvailable() {
void GPUTimer::GetStartEndTimestamps(int64* start, int64* end) {
DCHECK(start && end);
- DCHECK(elapsed_timer_result_.get());
+ DCHECK(elapsed_timer_result_.get() || time_stamp_result_.get());
DCHECK(IsAvailable());
- if (time_stamp_result_.get()) {
- DCHECK(time_stamp_result_->IsAvailable());
- const int64_t time_stamp = time_stamp_result_->GetStartValue();
- *start = time_stamp;
- *end = time_stamp + elapsed_timer_result_->GetDelta();
- } else {
- // Use estimation from elasped timer results.
- *start = elapsed_timer_result_->GetStartValue();
- *end = elapsed_timer_result_->GetEndValue();
- }
+ const int64_t time_stamp = time_stamp_result_.get() ?
+ time_stamp_result_->GetStartValue() :
+ elapsed_timer_result_->GetStartValue();
+ const int64_t elapsed_time = elapsed_timer_result_.get() ?
+ elapsed_timer_result_->GetDelta() :
+ 0;
+
+ *start = time_stamp;
+ *end = time_stamp + elapsed_time;
}
int64 GPUTimer::GetDeltaElapsed() {
- DCHECK(elapsed_timer_result_.get());
DCHECK(IsAvailable());
- return elapsed_timer_result_->GetDelta();
+ if (elapsed_timer_result_.get())
+ return elapsed_timer_result_->GetDelta();
+ return 0;
}
GPUTimer::GPUTimer(scoped_refptr<GPUTimingClient> gpu_timing_client,

Powered by Google App Engine
This is Rietveld 408576698