summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-18 18:10:03 +0000
committerapatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-18 18:10:03 +0000
commit800e161ef1c6293914f6a10299d1d87401140970 (patch)
treea9b31fa75dc208ac065560c31b8266915cefbb8a /gpu
parentb13e5b9869bfc68276f492ea64bb6aa5c9660ec3 (diff)
downloadchromium_src-800e161ef1c6293914f6a10299d1d87401140970.zip
chromium_src-800e161ef1c6293914f6a10299d1d87401140970.tar.gz
chromium_src-800e161ef1c6293914f6a10299d1d87401140970.tar.bz2
Changes to help optimizer eliminate redundant code in GPU logging.
Even in release builds, there was often a fair amount of overhead for DCHECK and friends. It was showing up quite high in my CodeAnalyst profiles and was not necessary in release mode. TEST=trybots, step through DCHECK code and check it doesn't do anything DCHECK related in release. BUG=none Review URL: http://codereview.chromium.org/7032016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85783 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/common/logging.h71
1 files changed, 47 insertions, 24 deletions
diff --git a/gpu/command_buffer/common/logging.h b/gpu/command_buffer/common/logging.h
index 6142335..6f8c99e 100644
--- a/gpu/command_buffer/common/logging.h
+++ b/gpu/command_buffer/common/logging.h
@@ -40,7 +40,10 @@ class Logger {
const char* file, int line,
const char* x_name,
const char* check_name) {
- return Logger(!!x, FATAL)
+ if (!!x)
+ return Logger(true, FATAL);
+
+ return Logger(false, FATAL)
<< file << "(" << line << "): " << check_name
<< "(" << x_name << " (" << x << ")) failed. ";
}
@@ -50,7 +53,10 @@ class Logger {
const char* file, int line,
const char* x_name, const char* y_name,
const char* check_name) {
- return Logger(x == y, FATAL)
+ if (x == y)
+ return Logger(true, FATAL);
+
+ return Logger(false, FATAL)
<< file << "(" << line << "): " << check_name
<< "(" << x_name << " (" << x << "), "
<< y_name << "(" << y << ")) failed. ";
@@ -61,7 +67,10 @@ class Logger {
const char* file, int line,
const char* x_name, const char* y_name,
const char* check_name) {
- return Logger(x != y, FATAL)
+ if (x != y)
+ return Logger(true, FATAL);
+
+ return Logger(false, FATAL)
<< file << "(" << line << "): " << check_name
<< "(" << x_name << " (" << x << "), "
<< y_name << "(" << y << ")) failed. ";
@@ -72,7 +81,10 @@ class Logger {
const char* file, int line,
const char* x_name, const char* y_name,
const char* check_name) {
- return Logger(x < y, FATAL)
+ if (x < y)
+ return Logger(true, FATAL);
+
+ return Logger(false, FATAL)
<< file << "(" << line << "): " << check_name
<< "(" << x_name << " (" << x << "), "
<< y_name << "(" << y << ")) failed. ";
@@ -83,7 +95,10 @@ class Logger {
const char* file, int line,
const char* x_name, const char* y_name,
const char* check_name) {
- return Logger(x > y, FATAL)
+ if (x > y)
+ return Logger(true, FATAL);
+
+ return Logger(false, FATAL)
<< file << "(" << line << "): " << check_name
<< "(" << x_name << " (" << x << "), "
<< y_name << "(" << y << ")) failed. ";
@@ -94,7 +109,10 @@ class Logger {
const char* file, int line,
const char* x_name, const char* y_name,
const char* check_name) {
- return Logger(x <= y, FATAL)
+ if (x <= y)
+ return Logger(true, FATAL);
+
+ return Logger(false, FATAL)
<< file << "(" << line << "): " << check_name
<< "(" << x_name << " (" << x << "), "
<< y_name << "(" << y << ")) failed. ";
@@ -105,7 +123,10 @@ class Logger {
const char* file, int line,
const char* x_name, const char* y_name,
const char* check_name) {
- return Logger(x >= y, FATAL)
+ if (x >= y)
+ return Logger(true, FATAL);
+
+ return Logger(false, FATAL)
<< file << "(" << line << "): " << check_name
<< "(" << x_name << " (" << x << "), "
<< y_name << "(" << y << ")) failed. ";
@@ -133,8 +154,17 @@ class Logger {
level_(logger.level_) {
}
- bool condition_;
- LogLevel level_;
+ const bool condition_;
+ const LogLevel level_;
+};
+
+// This is a logger that does not do anything for release builds.
+class NoLogger {
+ public:
+ template <typename T>
+ NoLogger& operator<<(const T& value) {
+ return *this;
+ }
};
} // namespace gpu
@@ -157,21 +187,14 @@ class Logger {
#if defined(NDEBUG)
-#define GPU_DCHECK(X) ::gpu::Logger::CheckTrue( \
- true, __FILE__, __LINE__, #X, "GPU_DCHECK")
-#define GPU_DCHECK_EQ(X, Y) ::gpu::Logger::CheckEqual( \
- false, false, __FILE__, __LINE__, #X, #Y, "GPU_DCHECK_EQ")
-#define GPU_DCHECK_NE(X, Y) ::gpu::Logger::CheckEqual( \
- false, false, __FILE__, __LINE__, #X, #Y, "GPU_DCHECK_NE")
-#define GPU_DCHECK_GT(X, Y) ::gpu::Logger::CheckEqual( \
- false, false, __FILE__, __LINE__, #X, #Y, "GPU_DCHECK_GT")
-#define GPU_DCHECK_LT(X, Y) ::gpu::Logger::CheckEqual( \
- false, false, __FILE__, __LINE__, #X, #Y, "GPU_DCHECK_LT")
-#define GPU_DCHECK_GE(X, Y) ::gpu::Logger::CheckEqual( \
- false, false, __FILE__, __LINE__, #X, #Y, "GPU_DCHECK_GE")
-#define GPU_DCHECK_LE(X, Y) ::gpu::Logger::CheckEqual( \
- false, false, __FILE__, __LINE__, #X, #Y, "GPU_DCHECK_LE")
-#define GPU_DLOG(LEVEL) ::gpu::Logger(false, LEVEL)
+#define GPU_DCHECK(X) ::gpu::NoLogger()
+#define GPU_DCHECK_EQ(X, Y) ::gpu::NoLogger()
+#define GPU_DCHECK_NE(X, Y) ::gpu::NoLogger()
+#define GPU_DCHECK_GT(X, Y) ::gpu::NoLogger()
+#define GPU_DCHECK_LT(X, Y) ::gpu::NoLogger()
+#define GPU_DCHECK_GE(X, Y) ::gpu::NoLogger()
+#define GPU_DCHECK_LE(X, Y) ::gpu::NoLogger()
+#define GPU_DLOG(LEVEL) ::gpu::NoLogger()
#else // NDEBUG