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

Side by Side Diff: gpu/command_buffer/service/buffer_manager.cc

Issue 2150803003: Introduce gpu_fuzzer to fuzz the GPU command buffers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fuzzer_land_base
Patch Set: Fix check, zero-out padding Created 4 years, 5 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "gpu/command_buffer/service/buffer_manager.h" 5 #include "gpu/command_buffer/service/buffer_manager.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
11 #include "base/format_macros.h" 11 #include "base/format_macros.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
15 #include "base/trace_event/memory_dump_manager.h" 15 #include "base/trace_event/memory_dump_manager.h"
16 #include "base/trace_event/trace_event.h" 16 #include "base/trace_event/trace_event.h"
17 #include "gpu/command_buffer/common/gles2_cmd_utils.h" 17 #include "gpu/command_buffer/common/gles2_cmd_utils.h"
18 #include "gpu/command_buffer/service/context_state.h" 18 #include "gpu/command_buffer/service/context_state.h"
19 #include "gpu/command_buffer/service/error_state.h" 19 #include "gpu/command_buffer/service/error_state.h"
20 #include "gpu/command_buffer/service/feature_info.h" 20 #include "gpu/command_buffer/service/feature_info.h"
21 #include "gpu/command_buffer/service/memory_tracking.h" 21 #include "gpu/command_buffer/service/memory_tracking.h"
22 #include "gpu/command_buffer/service/transform_feedback_manager.h" 22 #include "gpu/command_buffer/service/transform_feedback_manager.h"
23 #include "ui/gl/gl_bindings.h" 23 #include "ui/gl/gl_bindings.h"
24 #include "ui/gl/gl_implementation.h" 24 #include "ui/gl/gl_implementation.h"
25 #include "ui/gl/gl_version_info.h" 25 #include "ui/gl/gl_version_info.h"
26 #include "ui/gl/trace_util.h" 26 #include "ui/gl/trace_util.h"
27 27
28 namespace gpu { 28 namespace gpu {
29 namespace gles2 { 29 namespace gles2 {
30 namespace {
31 static const GLsizeiptr kDefaultMaxBufferSize = 1u << 30; // 1GB
32 }
30 33
31 BufferManager::BufferManager(MemoryTracker* memory_tracker, 34 BufferManager::BufferManager(MemoryTracker* memory_tracker,
32 FeatureInfo* feature_info) 35 FeatureInfo* feature_info)
33 : memory_type_tracker_( 36 : memory_type_tracker_(
34 new MemoryTypeTracker(memory_tracker)), 37 new MemoryTypeTracker(memory_tracker)),
35 memory_tracker_(memory_tracker), 38 memory_tracker_(memory_tracker),
36 feature_info_(feature_info), 39 feature_info_(feature_info),
40 max_buffer_size_(kDefaultMaxBufferSize),
37 allow_buffers_on_multiple_targets_(false), 41 allow_buffers_on_multiple_targets_(false),
38 allow_fixed_attribs_(false), 42 allow_fixed_attribs_(false),
39 buffer_count_(0), 43 buffer_count_(0),
40 primitive_restart_fixed_index_(0), 44 primitive_restart_fixed_index_(0),
41 lost_context_(false), 45 lost_context_(false),
42 use_client_side_arrays_for_stream_buffers_( 46 use_client_side_arrays_for_stream_buffers_(
43 feature_info 47 feature_info
44 ? feature_info->workarounds() 48 ? feature_info->workarounds()
45 .use_client_side_arrays_for_stream_buffers 49 .use_client_side_arrays_for_stream_buffers
46 : 0) { 50 : 0) {
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM( 392 ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
389 error_state, "glBufferData", usage, "usage"); 393 error_state, "glBufferData", usage, "usage");
390 return; 394 return;
391 } 395 }
392 if (size < 0) { 396 if (size < 0) {
393 ERRORSTATE_SET_GL_ERROR( 397 ERRORSTATE_SET_GL_ERROR(
394 error_state, GL_INVALID_VALUE, "glBufferData", "size < 0"); 398 error_state, GL_INVALID_VALUE, "glBufferData", "size < 0");
395 return; 399 return;
396 } 400 }
397 401
398 if (size > 1024 * 1024 * 1024) { 402 if (size > max_buffer_size_) {
399 ERRORSTATE_SET_GL_ERROR(error_state, GL_OUT_OF_MEMORY, "glBufferData", 403 ERRORSTATE_SET_GL_ERROR(error_state, GL_OUT_OF_MEMORY, "glBufferData",
400 "cannot allocate more than 1GB."); 404 "cannot allocate more than 1GB.");
401 return; 405 return;
402 } 406 }
403 407
404 Buffer* buffer = GetBufferInfoForTarget(context_state, target); 408 Buffer* buffer = GetBufferInfoForTarget(context_state, target);
405 if (!buffer) { 409 if (!buffer) {
406 ERRORSTATE_SET_GL_ERROR( 410 ERRORSTATE_SET_GL_ERROR(
407 error_state, GL_INVALID_VALUE, "glBufferData", "unknown buffer"); 411 error_state, GL_INVALID_VALUE, "glBufferData", "unknown buffer");
408 return; 412 return;
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 auto guid = gl::GetGLBufferGUIDForTracing(share_group_tracing_guid, 661 auto guid = gl::GetGLBufferGUIDForTracing(share_group_tracing_guid,
658 client_buffer_id); 662 client_buffer_id);
659 pmd->CreateSharedGlobalAllocatorDump(guid); 663 pmd->CreateSharedGlobalAllocatorDump(guid);
660 pmd->AddOwnershipEdge(dump->guid(), guid); 664 pmd->AddOwnershipEdge(dump->guid(), guid);
661 } 665 }
662 return true; 666 return true;
663 } 667 }
664 668
665 } // namespace gles2 669 } // namespace gles2
666 } // namespace gpu 670 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/buffer_manager.h ('k') | gpu/command_buffer/service/command_buffer_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698