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

Unified Diff: gpu/command_buffer/tests/fuzzer_main.cc

Issue 2691643002: Add gpu_angle_passthrough_fuzzer. (Closed)
Patch Set: Created 3 years, 10 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 | « gpu/BUILD.gn ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/tests/fuzzer_main.cc
diff --git a/gpu/command_buffer/tests/fuzzer_main.cc b/gpu/command_buffer/tests/fuzzer_main.cc
index 4f65a152496ba038f463b15ea22b6dd2e8b678d0..96f0e491fa2855b1ef14d30c8d95febffbb65e1f 100644
--- a/gpu/command_buffer/tests/fuzzer_main.cc
+++ b/gpu/command_buffer/tests/fuzzer_main.cc
@@ -22,6 +22,7 @@
#include "gpu/command_buffer/service/command_executor.h"
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/command_buffer/service/logger.h"
#include "gpu/command_buffer/service/mailbox_manager_impl.h"
#include "gpu/command_buffer/service/sync_point_manager.h"
@@ -96,14 +97,41 @@ class CommandBufferSetup {
logging::SetMinLogLevel(logging::LOG_FATAL);
base::CommandLine::Init(0, NULL);
-#if defined(GPU_FUZZER_USE_ANGLE)
auto* command_line = base::CommandLine::ForCurrentProcess();
+ (void)command_line;
piman 2017/03/09 18:15:13 nit: ALLOW_UNUSED_LOCAL
Geoff Lang 2017/03/09 19:29:10 Done.
+
+#if defined(GPU_FUZZER_USE_PASSTHROUGH_CMD_DECODER)
+ command_line->AppendSwitch(switches::kUsePassthroughCmdDecoder);
+ gpu_preferences_.use_passthrough_cmd_decoder = true;
+#endif
+
+#if defined(GPU_FUZZER_USE_ANGLE)
command_line->AppendSwitchASCII(switches::kUseGL,
gl::kGLImplementationANGLEName);
command_line->AppendSwitchASCII(switches::kUseANGLE,
gl::kANGLEImplementationNullName);
gl::init::InitializeGLOneOffImplementation(gl::kGLImplementationEGLGLES2,
false, false, false);
+#else
+ gl::GLSurfaceTestSupport::InitializeOneOffWithMockBindings();
+#endif
+
+ sync_point_client_ = sync_point_manager_->CreateSyncPointClient(
+ sync_point_order_data_, CommandBufferNamespace::IN_PROCESS,
+ command_buffer_id_);
+
+ translator_cache_ = new gles2::ShaderTranslatorCache(gpu_preferences_);
+ completeness_cache_ = new gles2::FramebufferCompletenessCache;
+
+ InitDecoder();
+ }
+
+ void InitDecoder() {
+ if (decoder_initialized_) {
+ return;
+ }
+
+#if defined(GPU_FUZZER_USE_ANGLE)
surface_ = new gl::PbufferGLSurfaceEGL(gfx::Size());
surface_->Initialize();
@@ -117,18 +145,8 @@ class CommandBufferSetup {
context_stub->SetExtensionsString(kExtensions);
context_stub->SetUseStubApi(true);
context_ = context_stub;
- gl::GLSurfaceTestSupport::InitializeOneOffWithMockBindings();
#endif
- sync_point_client_ = sync_point_manager_->CreateSyncPointClient(
- sync_point_order_data_, CommandBufferNamespace::IN_PROCESS,
- command_buffer_id_);
-
- translator_cache_ = new gles2::ShaderTranslatorCache(gpu_preferences_);
- completeness_cache_ = new gles2::FramebufferCompletenessCache;
- }
-
- void InitDecoder() {
context_->MakeCurrent(surface_.get());
scoped_refptr<gles2::FeatureInfo> feature_info =
new gles2::FeatureInfo();
@@ -177,15 +195,27 @@ class CommandBufferSetup {
vertex_translator_ = decoder_->GetTranslator(GL_VERTEX_SHADER);
fragment_translator_ = decoder_->GetTranslator(GL_FRAGMENT_SHADER);
}
+
+ decoder_initialized_ = true;
piman 2017/03/09 18:15:13 Why the need for this? Before this change, we init
Geoff Lang 2017/03/09 19:29:10 I added this due to the comment referenced below.
piman 2017/03/09 22:12:35 Right, the important part is that the ANGLE DLL is
Geoff Lang 2017/03/09 22:22:13 Sounds good, I'll update that when I get back to M
Geoff Lang 2017/03/16 17:22:08 Done, I also updated it to only re-create the cont
}
void ResetDecoder() {
+ if (!decoder_initialized_) {
+ return;
+ }
+
decoder_->Destroy(true);
decoder_.reset();
command_buffer_.reset();
+ surface_ = nullptr;
+ context_->ReleaseCurrent(nullptr);
+ context_ = nullptr;
+
+ decoder_initialized_ = false;
}
~CommandBufferSetup() {
+ ResetDecoder();
sync_point_client_ = nullptr;
if (sync_point_order_data_) {
sync_point_order_data_->Destroy();
@@ -288,6 +318,8 @@ class CommandBufferSetup {
scoped_refptr<gl::GLShareGroup> share_group_;
const gpu::CommandBufferId command_buffer_id_;
+ bool decoder_initialized_ = false;
+
scoped_refptr<gl::GLSurface> surface_;
scoped_refptr<gl::GLContext> context_;
« no previous file with comments | « gpu/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698