diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-18 18:10:03 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-18 18:10:03 +0000 |
commit | 800e161ef1c6293914f6a10299d1d87401140970 (patch) | |
tree | a9b31fa75dc208ac065560c31b8266915cefbb8a /gpu | |
parent | b13e5b9869bfc68276f492ea64bb6aa5c9660ec3 (diff) | |
download | chromium_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.h | 71 |
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 |