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

Side by Side Diff: gpu/perftests/texture_upload_perftest.cc

Issue 1022923002: gpu: Benchmark GL_RED instead of GL_LUMINANCE on OpenGL ES3. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/containers/small_map.h" 8 #include "base/containers/small_map.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "gpu/perftests/measurements.h" 13 #include "gpu/perftests/measurements.h"
14 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "testing/perf/perf_test.h" 16 #include "testing/perf/perf_test.h"
17 #include "ui/gfx/geometry/size.h" 17 #include "ui/gfx/geometry/size.h"
18 #include "ui/gfx/geometry/vector2d_f.h" 18 #include "ui/gfx/geometry/vector2d_f.h"
19 #include "ui/gl/gl_bindings.h" 19 #include "ui/gl/gl_bindings.h"
20 #include "ui/gl/gl_context.h" 20 #include "ui/gl/gl_context.h"
21 #include "ui/gl/gl_enums.h" 21 #include "ui/gl/gl_enums.h"
22 #include "ui/gl/gl_surface.h" 22 #include "ui/gl/gl_surface.h"
23 #include "ui/gl/gl_version_info.h"
23 #include "ui/gl/gpu_timing.h" 24 #include "ui/gl/gpu_timing.h"
24 #include "ui/gl/scoped_make_current.h" 25 #include "ui/gl/scoped_make_current.h"
25 26
26 namespace gpu { 27 namespace gpu {
27 namespace { 28 namespace {
28 29
29 const int kUploadPerfWarmupRuns = 10; 30 const int kUploadPerfWarmupRuns = 5;
30 const int kUploadPerfTestRuns = 100; 31 const int kUploadPerfTestRuns = 30;
31 32
32 #define SHADER(Src) #Src 33 #define SHADER(Src) #Src
33 34
34 // clang-format off 35 // clang-format off
35 const char kVertexShader[] = 36 const char kVertexShader[] =
36 SHADER( 37 SHADER(
37 uniform vec2 translation; 38 uniform vec2 translation;
38 attribute vec2 a_position; 39 attribute vec2 a_position;
39 attribute vec2 a_texCoord; 40 attribute vec2 a_texCoord;
40 varying vec2 v_texCoord; 41 varying vec2 v_texCoord;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 int rgba_stride = size.width() * GLFormatBytePerPixel(GL_RGBA); 120 int rgba_stride = size.width() * GLFormatBytePerPixel(GL_RGBA);
120 for (int y = 0; y < size.height(); ++y) { 121 for (int y = 0; y < size.height(); ++y) {
121 for (int x = 0; x < size.width(); ++x) { 122 for (int x = 0; x < size.width(); ++x) {
122 int rgba_index = y * rgba_stride + x * GLFormatBytePerPixel(GL_RGBA); 123 int rgba_index = y * rgba_stride + x * GLFormatBytePerPixel(GL_RGBA);
123 int pixels_index = y * pixels_stride + x * bytes_per_pixel; 124 int pixels_index = y * pixels_stride + x * bytes_per_pixel;
124 uint8 expected[4] = {0}; 125 uint8 expected[4] = {0};
125 switch (format) { 126 switch (format) {
126 case GL_LUMINANCE: // (L_t, L_t, L_t, 1) 127 case GL_LUMINANCE: // (L_t, L_t, L_t, 1)
127 expected[1] = pixels[pixels_index]; 128 expected[1] = pixels[pixels_index];
128 expected[2] = pixels[pixels_index]; 129 expected[2] = pixels[pixels_index];
129 case GL_RED_EXT: // (R_t, 0, 0, 1)n 130 case GL_RED: // (R_t, 0, 0, 1)
130 expected[0] = pixels[pixels_index]; 131 expected[0] = pixels[pixels_index];
131 expected[3] = 255; 132 expected[3] = 255;
132 break; 133 break;
133 case GL_RGBA: // (R_t, G_t, B_t, A_t) 134 case GL_RGBA: // (R_t, G_t, B_t, A_t)
134 memcpy(expected, &pixels[pixels_index], 4); 135 memcpy(expected, &pixels[pixels_index], 4);
135 break; 136 break;
136 default: 137 default:
137 NOTREACHED(); 138 NOTREACHED();
138 } 139 }
139 if (memcmp(&rgba[rgba_index], expected, 4)) { 140 if (memcmp(&rgba[rgba_index], expected, 4)) {
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 GLint translation_location_ = -1; 380 GLint translation_location_ = -1;
380 GLuint vertex_buffer_ = 0; 381 GLuint vertex_buffer_ = 0;
381 }; 382 };
382 383
383 // Perf test that generates, uploads and draws a texture on a surface repeatedly 384 // Perf test that generates, uploads and draws a texture on a surface repeatedly
384 // and prints out aggregated measurements for all the runs. 385 // and prints out aggregated measurements for all the runs.
385 TEST_F(TextureUploadPerfTest, glTexImage2d) { 386 TEST_F(TextureUploadPerfTest, glTexImage2d) {
386 int sizes[] = {21, 128, 256, 512, 1024}; 387 int sizes[] = {21, 128, 256, 512, 1024};
387 std::vector<GLenum> formats; 388 std::vector<GLenum> formats;
388 formats.push_back(GL_RGBA); 389 formats.push_back(GL_RGBA);
389 // Used by default for ResourceProvider::yuv_resource_format_. 390
390 formats.push_back(GL_LUMINANCE); 391 if (!gl_context_->GetVersionInfo()->is_es3) {
392 // Used by default for ResourceProvider::yuv_resource_format_.
393 formats.push_back(GL_LUMINANCE);
394 }
391 395
392 ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get()); 396 ui::ScopedMakeCurrent smc(gl_context_.get(), surface_.get());
393 bool has_texture_rg = gl_context_->HasExtension("GL_EXT_texture_rg") || 397 const bool has_texture_rg = gl_context_->GetVersionInfo()->is_es3 ||
394 gl_context_->HasExtension("GL_ARB_texture_rg"); 398 gl_context_->HasExtension("GL_EXT_texture_rg") ||
399 gl_context_->HasExtension("GL_ARB_texture_rg");
395 400
396 if (has_texture_rg) { 401 if (has_texture_rg) {
397 // Used as ResourceProvider::yuv_resource_format_ if 402 // Used as ResourceProvider::yuv_resource_format_ if
398 // {ARB,EXT}_texture_rg are available. 403 // {ARB,EXT}_texture_rg are available.
399 formats.push_back(GL_RED_EXT); 404 formats.push_back(GL_RED);
400 } 405 }
401 for (int side : sizes) { 406 for (int side : sizes) {
402 ASSERT_GE(fbo_size_.width(), side); 407 ASSERT_GE(fbo_size_.width(), side);
403 ASSERT_GE(fbo_size_.height(), side); 408 ASSERT_GE(fbo_size_.height(), side);
404 gfx::Size size(side, side); 409 gfx::Size size(side, side);
405 GenerateVertexBuffer(size); 410 GenerateVertexBuffer(size);
406 for (GLenum format : formats) { 411 for (GLenum format : formats) {
407 RunUploadAndDrawMultipleTimes(size, format); 412 RunUploadAndDrawMultipleTimes(size, format);
408 } 413 }
409 } 414 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 gpu_timing_client_->CheckAndResetTimerErrors(); 477 gpu_timing_client_->CheckAndResetTimerErrors();
473 if (!gpu_timer_errors) { 478 if (!gpu_timer_errors) {
474 upload_and_draw_timers.GetAsMeasurement("upload_and_draw") 479 upload_and_draw_timers.GetAsMeasurement("upload_and_draw")
475 .PrintResult("renaming"); 480 .PrintResult("renaming");
476 finish_timers.GetAsMeasurement("finish").PrintResult("renaming"); 481 finish_timers.GetAsMeasurement("finish").PrintResult("renaming");
477 } 482 }
478 } 483 }
479 484
480 } // namespace 485 } // namespace
481 } // namespace gpu 486 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698