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

Unified Diff: cc/ThrottledTextureUploader.cpp

Issue 11028129: cc: Improve texture per second calculation and overhead (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Keep a sorted history and discard min/max Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/ThrottledTextureUploader.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/ThrottledTextureUploader.cpp
diff --git a/cc/ThrottledTextureUploader.cpp b/cc/ThrottledTextureUploader.cpp
index c152598aa648e1586aa9b892e16bd4e53750797d..545bf105f65152c0d98b316dd9401d3de5bdd5cc 100644
--- a/cc/ThrottledTextureUploader.cpp
+++ b/cc/ThrottledTextureUploader.cpp
@@ -8,14 +8,15 @@
#include "Extensions3DChromium.h"
#include "TraceEvent.h"
#include <algorithm>
+#include <iterator>
#include <public/Platform.h>
#include <public/WebGraphicsContext3D.h>
-#include <vector>
namespace {
// How many previous uploads to use when predicting future throughput.
-static const size_t uploadHistorySize = 100;
+static const size_t uploadHistorySizeMax = 1000;
+static const size_t uploadHistorySizeInitial = 100;
// Global estimated number of textures per second to maintain estimates across
// subsequent instances of ThrottledTextureUploader.
@@ -87,9 +88,11 @@ bool ThrottledTextureUploader::Query::isNonBlocking()
ThrottledTextureUploader::ThrottledTextureUploader(WebKit::WebGraphicsContext3D* context)
: m_context(context)
- , m_texturesPerSecondHistory(uploadHistorySize, estimatedTexturesPerSecondGlobal)
, m_numBlockingTextureUploads(0)
+ , m_historyRemovalCount(0)
{
+ for (size_t i = uploadHistorySizeInitial; i > 0; i--)
+ m_texturesPerSecondHistory.insert(estimatedTexturesPerSecondGlobal);
}
ThrottledTextureUploader::~ThrottledTextureUploader()
@@ -120,15 +123,10 @@ double ThrottledTextureUploader::estimatedTexturesPerSecond()
{
processQueries();
- // The history should never be empty because we initialize all elements with an estimate.
- ASSERT(m_texturesPerSecondHistory.size() == uploadHistorySize);
-
- // Sort the history and use the median as our estimate.
- std::vector<double> sortedHistory(m_texturesPerSecondHistory.begin(),
- m_texturesPerSecondHistory.end());
- std::sort(sortedHistory.begin(), sortedHistory.end());
-
- estimatedTexturesPerSecondGlobal = sortedHistory[sortedHistory.size() * 2 / 3];
+ // Use the 3/4 median as our optimistic estimate.
reveman 2012/10/12 01:41:00 I'm not convinced that 3/4 median magic number we
+ std::set<double>::iterator median = m_texturesPerSecondHistory.end();
+ std::advance(median, -(int)m_texturesPerSecondHistory.size() / 4);
reveman 2012/10/12 01:41:00 nit: use static_cast<> here
+ estimatedTexturesPerSecondGlobal = *median;
TRACE_COUNTER1("cc", "estimatedTexturesPerSecond", estimatedTexturesPerSecondGlobal);
return estimatedTexturesPerSecondGlobal;
}
@@ -176,10 +174,17 @@ void ThrottledTextureUploader::processQueries()
if (!m_pendingQueries.first()->isNonBlocking())
m_numBlockingTextureUploads--;
- // Remove the oldest values from our history and insert the new one
+ // Alternately remove the min or max value from our history and insert the new one.
+ // We remove the min 3/4 of the time and the max 1/4 of the time to keep an optimistic history.
double texturesPerSecond = 1.0 / (usElapsed * 1e-6);
- m_texturesPerSecondHistory.pop_back();
- m_texturesPerSecondHistory.push_front(texturesPerSecond);
+ m_texturesPerSecondHistory.insert(texturesPerSecond);
reveman 2012/10/12 01:41:00 maybe do the remove before adding the new value?
+ if (m_texturesPerSecondHistory.size() >= uploadHistorySizeMax) {
+ if (m_historyRemovalCount & 0x3)
reveman 2012/10/12 01:41:00 how about we save the 3/4 and 1/4 details for late
+ m_texturesPerSecondHistory.erase(m_texturesPerSecondHistory.begin());
+ else
+ m_texturesPerSecondHistory.erase(--m_texturesPerSecondHistory.end());
+ m_historyRemovalCount++;
+ }
m_availableQueries.append(m_pendingQueries.takeFirst());
}
« no previous file with comments | « cc/ThrottledTextureUploader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698