summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ash/ash_unittests.isolate1
-rw-r--r--cc/cc_unittests.isolate1
-rw-r--r--chrome/sync_integration_tests.isolate1
-rw-r--r--chrome/unit_tests.isolate1
-rw-r--r--components/components_browsertests.isolate9
-rw-r--r--components/components_unittests.isolate1
-rw-r--r--content/content_browsertests.isolate1
-rw-r--r--content/content_gpu.gypi5
-rw-r--r--content/content_unittests.isolate1
-rw-r--r--content/gpu/gpu_main.cc19
-rw-r--r--extensions/extensions_browsertests.isolate1
-rw-r--r--gpu/gpu_unittests.isolate1
-rw-r--r--tools/metrics/histograms/histograms.xml40
-rw-r--r--ui/gl/BUILD.gn4
-rw-r--r--ui/gl/DEPS6
-rw-r--r--ui/gl/angle_platform_impl.cc50
-rw-r--r--ui/gl/angle_platform_impl.h39
-rw-r--r--ui/gl/gl.gyp7
-rw-r--r--ui/gl/gl_implementation_win.cc14
19 files changed, 182 insertions, 20 deletions
diff --git a/ash/ash_unittests.isolate b/ash/ash_unittests.isolate
index 319dfc7..40e3e79 100644
--- a/ash/ash_unittests.isolate
+++ b/ash/ash_unittests.isolate
@@ -64,5 +64,6 @@
],
'includes': [
'../base/base.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/cc/cc_unittests.isolate b/cc/cc_unittests.isolate
index dc6c449..7c359d0 100644
--- a/cc/cc_unittests.isolate
+++ b/cc/cc_unittests.isolate
@@ -84,5 +84,6 @@
],
'includes': [
'../base/base.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/chrome/sync_integration_tests.isolate b/chrome/sync_integration_tests.isolate
index abecb56..06741e3 100644
--- a/chrome/sync_integration_tests.isolate
+++ b/chrome/sync_integration_tests.isolate
@@ -108,5 +108,6 @@
'includes': [
'../base/base.isolate',
'../gin/v8.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/chrome/unit_tests.isolate b/chrome/unit_tests.isolate
index 715e1fe..33821eb 100644
--- a/chrome/unit_tests.isolate
+++ b/chrome/unit_tests.isolate
@@ -157,5 +157,6 @@
'includes': [
'../base/base.isolate',
'../gin/v8.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/components/components_browsertests.isolate b/components/components_browsertests.isolate
index c18c7cf..f384f85f 100644
--- a/components/components_browsertests.isolate
+++ b/components/components_browsertests.isolate
@@ -2,10 +2,6 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
{
- 'includes': [
- '../base/base.isolate',
- '../gin/v8.isolate',
- ],
'conditions': [
['use_x11==0', {
'variables': {
@@ -74,4 +70,9 @@
},
}],
],
+ 'includes': [
+ '../base/base.isolate',
+ '../gin/v8.isolate',
+ '../third_party/angle/angle.isolate',
+ ],
}
diff --git a/components/components_unittests.isolate b/components/components_unittests.isolate
index e240ea7..ed969e0 100644
--- a/components/components_unittests.isolate
+++ b/components/components_unittests.isolate
@@ -94,5 +94,6 @@
],
'includes': [
'../base/base.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/content/content_browsertests.isolate b/content/content_browsertests.isolate
index 84379d6..aa24c23 100644
--- a/content/content_browsertests.isolate
+++ b/content/content_browsertests.isolate
@@ -141,5 +141,6 @@
'includes': [
'../base/base.isolate',
'../gin/v8.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/content/content_gpu.gypi b/content/content_gpu.gypi
index af0c47f..1c2121d 100644
--- a/content/content_gpu.gypi
+++ b/content/content_gpu.gypi
@@ -26,13 +26,10 @@
['OS=="win"', {
'include_dirs': [
'<(DEPTH)/third_party/khronos',
+ # ANGLE libs picked up from ui/gl
'<(angle_path)/src',
'<(DEPTH)/third_party/wtl/include',
],
- 'dependencies': [
- '<(angle_path)/src/angle.gyp:libEGL',
- '<(angle_path)/src/angle.gyp:libGLESv2',
- ],
'link_settings': {
'libraries': [
'-lsetupapi.lib',
diff --git a/content/content_unittests.isolate b/content/content_unittests.isolate
index f61a3e1..07ac6e7 100644
--- a/content/content_unittests.isolate
+++ b/content/content_unittests.isolate
@@ -109,5 +109,6 @@
'includes': [
'../base/base.isolate',
'../gin/v8.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
index b34d42f..76a6020 100644
--- a/content/gpu/gpu_main.cc
+++ b/content/gpu/gpu_main.cc
@@ -12,6 +12,7 @@
#include "base/lazy_instance.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h"
+#include "base/metrics/statistics_recorder.h"
#include "base/rand_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
@@ -214,14 +215,14 @@ int GpuMain(const MainFunctionParams& parameters) {
watchdog_thread->StartWithOptions(options);
}
+ // Initializes StatisticsRecorder which tracks UMA histograms.
+ base::StatisticsRecorder::Initialize();
+
gpu::GPUInfo gpu_info;
// Get vendor_id, device_id, driver_version from browser process through
// commandline switches.
GetGpuInfoFromCommandLine(gpu_info, command_line);
- base::TimeDelta collect_context_time;
- base::TimeDelta initialize_one_off_time;
-
// Warm up resources that don't need access to GPUInfo.
if (WarmUpSandbox(command_line)) {
#if defined(OS_LINUX)
@@ -293,15 +294,18 @@ int GpuMain(const MainFunctionParams& parameters) {
#endif // !defined(OS_CHROMEOS)
#endif // defined(OS_LINUX)
#endif // !defined(OS_MACOSX)
- collect_context_time =
+ base::TimeDelta collect_context_time =
base::TimeTicks::Now() - before_collect_context_graphics_info;
+ UMA_HISTOGRAM_TIMES("GPU.CollectContextGraphicsInfo",
+ collect_context_time);
} else { // gl_initialized
VLOG(1) << "gfx::GLSurface::InitializeOneOff failed";
dead_on_arrival = true;
}
- initialize_one_off_time =
+ base::TimeDelta initialize_one_off_time =
base::TimeTicks::Now() - before_initialize_one_off;
+ UMA_HISTOGRAM_TIMES("GPU.InitializeOneOffTime", initialize_one_off_time);
if (enable_watchdog && delayed_watchdog_enable) {
watchdog_thread = new GpuWatchdogThread(kGpuTimeout);
@@ -342,11 +346,6 @@ int GpuMain(const MainFunctionParams& parameters) {
GpuProcess gpu_process;
- // These UMA must be stored after GpuProcess is constructed as it
- // initializes StatisticsRecorder which tracks the histograms.
- UMA_HISTOGRAM_TIMES("GPU.CollectContextGraphicsInfo", collect_context_time);
- UMA_HISTOGRAM_TIMES("GPU.InitializeOneOffTime", initialize_one_off_time);
-
GpuChildThread* child_thread = new GpuChildThread(watchdog_thread.get(),
dead_on_arrival,
gpu_info,
diff --git a/extensions/extensions_browsertests.isolate b/extensions/extensions_browsertests.isolate
index d939336..301e919 100644
--- a/extensions/extensions_browsertests.isolate
+++ b/extensions/extensions_browsertests.isolate
@@ -80,5 +80,6 @@
'includes': [
'../base/base.isolate',
'../gin/v8.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/gpu/gpu_unittests.isolate b/gpu/gpu_unittests.isolate
index b12c5cb..7ad1b79 100644
--- a/gpu/gpu_unittests.isolate
+++ b/gpu/gpu_unittests.isolate
@@ -59,5 +59,6 @@
],
'includes': [
'../base/base.isolate',
+ '../third_party/angle/angle.isolate',
],
}
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index aa06120..dd3788b 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -10861,6 +10861,22 @@ Therefore, the affected-histogram name has to have at least one dot in it.
</summary>
</histogram>
+<histogram name="GPU.ANGLE.D3D11InitializeResult" enum="D3D11InitializeResult">
+ <owner>jmadill@chromium.org</owner>
+ <summary>
+ The result from initializing a D3D11 device in ANGLE. Can be success, or one
+ of several error codes which indicate different reasons for failing.
+ </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.D3D9InitializeResult" enum="D3D9InitializeResult">
+ <owner>jmadill@chromium.org</owner>
+ <summary>
+ The result from initializing a D3D9 device in ANGLE. Can be success, or one
+ of several error codes which indicate different reasons for failing.
+ </summary>
+</histogram>
+
<histogram name="GPU.CollectContextGraphicsInfo" units="microseconds">
<owner>vangelis@chromium.org</owner>
<summary>
@@ -10882,7 +10898,8 @@ Therefore, the affected-histogram name has to have at least one dot in it.
<owner>jmadill@chromium.org</owner>
<summary>
ANGLE's currently active D3D shader model version. Logged once every startup
- of the GPU process, on Windows only.
+ of the GPU process, on Windows only. Note that Shader Models 2 and 3 map to
+ D3D9 with ANGLE, and 4+ map to D3D11 ANGLE.
</summary>
</histogram>
@@ -46074,6 +46091,27 @@ Therefore, the affected-histogram name has to have at least one dot in it.
<int value="2" label="Has enough SCTs"/>
</enum>
+<enum name="D3D11InitializeResult" type="int">
+ <int value="0" label="Success"/>
+ <int value="1" label="Error initializing compiler"/>
+ <int value="2" label="Missing DLL dependency"/>
+ <int value="3" label="D3D11CreateDevice returned E_INVALIDARG"/>
+ <int value="4" label="D3D11CreateDevice returned other error"/>
+ <int value="5" label="DXGI version not supported"/>
+ <int value="6" label="Other initialization error"/>
+</enum>
+
+<enum name="D3D9InitializeResult" type="int">
+ <int value="0" label="Success"/>
+ <int value="1" label="Error initializing compiler"/>
+ <int value="2" label="Missing DLL dependency"/>
+ <int value="3" label="Error creating device"/>
+ <int value="4" label="Shader version not supported"/>
+ <int value="5" label="StretchRect from textures not supported"/>
+ <int value="6" label="Device lost of out-of-memory error"/>
+ <int value="7" label="Other initialization error"/>
+</enum>
+
<enum name="DailyEventIntervalType" type="int">
<int value="0" label="First Run"/>
<int value="1" label="Day Elapsed"/>
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn
index 12a44cc..88b4c36 100644
--- a/ui/gl/BUILD.gn
+++ b/ui/gl/BUILD.gn
@@ -183,6 +183,8 @@ component("gl") {
}
if (is_win) {
sources += [
+ "angle_platform_impl.cc",
+ "angle_platform_impl.h",
"gl_bindings_autogen_wgl.cc",
"gl_bindings_autogen_wgl.h",
"gl_context_wgl.cc",
@@ -195,6 +197,8 @@ component("gl") {
"gl_wgl_api_implementation.h",
]
+ deps += [ "//third_party/angle:libGLESv2" ]
+
libs = [ "dwmapi.lib" ]
ldflags = [ "/DELAYLOAD:dwmapi.dll" ]
}
diff --git a/ui/gl/DEPS b/ui/gl/DEPS
index 862c555..e582c0d 100644
--- a/ui/gl/DEPS
+++ b/ui/gl/DEPS
@@ -12,5 +12,9 @@ specific_include_rules = {
# get access to desktop OpenGL.
"gl_surface_osmesa.cc": [
"+third_party/mesa/src/include/GL/osmesa.h",
- ]
+ ],
+# Allow us to include ANGLE's base platform implementation.
+ "angle_platform_impl.h": [
+ "+third_party/angle/include/platform/Platform.h",
+ ],
}
diff --git a/ui/gl/angle_platform_impl.cc b/ui/gl/angle_platform_impl.cc
new file mode 100644
index 0000000..2ce12b8
--- /dev/null
+++ b/ui/gl/angle_platform_impl.cc
@@ -0,0 +1,50 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gl/angle_platform_impl.h"
+
+#include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
+
+namespace gfx {
+
+ANGLEPlatformImpl::ANGLEPlatformImpl() {
+}
+
+ANGLEPlatformImpl::~ANGLEPlatformImpl() {
+}
+
+void ANGLEPlatformImpl::histogramCustomCounts(const char* name,
+ int sample,
+ int min,
+ int max,
+ int bucket_count) {
+ // Copied from histogram macro, but without the static variable caching
+ // the histogram because name is dynamic.
+ base::HistogramBase* counter = base::Histogram::FactoryGet(
+ name, min, max, bucket_count,
+ base::HistogramBase::kUmaTargetedHistogramFlag);
+ DCHECK_EQ(name, counter->histogram_name());
+ counter->Add(sample);
+}
+
+void ANGLEPlatformImpl::histogramEnumeration(const char* name,
+ int sample,
+ int boundary_value) {
+ // Copied from histogram macro, but without the static variable caching
+ // the histogram because name is dynamic.
+ base::HistogramBase* counter = base::LinearHistogram::FactoryGet(
+ name, 1, boundary_value, boundary_value + 1,
+ base::HistogramBase::kUmaTargetedHistogramFlag);
+ DCHECK_EQ(name, counter->histogram_name());
+ counter->Add(sample);
+}
+
+void ANGLEPlatformImpl::histogramSparse(const char* name, int sample) {
+ // For sparse histograms, we can use the macro, as it does not incorporate a
+ // static.
+ UMA_HISTOGRAM_SPARSE_SLOWLY(name, sample);
+}
+
+} // namespace gfx
diff --git a/ui/gl/angle_platform_impl.h b/ui/gl/angle_platform_impl.h
new file mode 100644
index 0000000..2d12f60
--- /dev/null
+++ b/ui/gl/angle_platform_impl.h
@@ -0,0 +1,39 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GL_ANGLE_PLATFORM_IMPL_H_
+#define UI_GL_ANGLE_PLATFORM_IMPL_H_
+
+// Implements the ANGLE platform interface, for functionality like
+// histograms and trace profiling.
+
+#include "base/macros.h"
+#include "third_party/angle/include/platform/Platform.h"
+
+namespace gfx {
+
+// Derives the base ANGLE platform and provides implementations
+class ANGLEPlatformImpl : public angle::Platform {
+ public:
+ ANGLEPlatformImpl();
+ ~ANGLEPlatformImpl() override;
+
+ // angle::Platform:
+ void histogramCustomCounts(const char* name,
+ int sample,
+ int min,
+ int max,
+ int bucket_count) override;
+ void histogramEnumeration(const char* name,
+ int sample,
+ int boundary_value) override;
+ void histogramSparse(const char* name, int sample) override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ANGLEPlatformImpl);
+};
+
+} // namespace gfx
+
+#endif // UI_GL_ANGLE_PLATFORM_IMPL_H_
diff --git a/ui/gl/gl.gyp b/ui/gl/gl.gyp
index 05381078..d62950a 100644
--- a/ui/gl/gl.gyp
+++ b/ui/gl/gl.gyp
@@ -186,6 +186,8 @@
}],
['OS=="win"', {
'sources': [
+ 'angle_platform_impl.cc',
+ 'angle_platform_impl.h',
'gl_bindings_autogen_wgl.cc',
'gl_bindings_autogen_wgl.h',
'gl_context_wgl.cc',
@@ -197,6 +199,11 @@
'gl_wgl_api_implementation.cc',
'gl_wgl_api_implementation.h',
],
+ 'dependencies': [
+ # TODO(jmadill): Use ANGLE on other platforms.
+ '<(angle_path)/src/angle.gyp:libEGL',
+ '<(angle_path)/src/angle.gyp:libGLESv2',
+ ],
'msvs_settings': {
'VCLinkerTool': {
'DelayLoadDLLs': [
diff --git a/ui/gl/gl_implementation_win.cc b/ui/gl/gl_implementation_win.cc
index 477f5a5..618250d 100644
--- a/ui/gl/gl_implementation_win.cc
+++ b/ui/gl/gl_implementation_win.cc
@@ -9,6 +9,7 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
+#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/native_library.h"
#include "base/path_service.h"
@@ -16,6 +17,8 @@
#include "base/threading/thread_restrictions.h"
#include "base/trace_event/trace_event.h"
#include "base/win/windows_version.h"
+// TODO(jmadill): Apply to all platforms eventually
+#include "ui/gl/angle_platform_impl.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_context_stub_with_extensions.h"
#include "ui/gl/gl_egl_api_implementation.h"
@@ -97,6 +100,10 @@ typedef void (__stdcall *SetTraceFunctionPointersFunc)(
GetCategoryEnabledFlagFunc get_category_enabled_flag,
AddTraceEventFunc add_trace_event_func);
+// TODO(jmadill): Apply to all platforms eventually
+base::LazyInstance<ANGLEPlatformImpl> g_angle_platform_impl =
+ LAZY_INSTANCE_INITIALIZER;
+
} // namespace
void GetAllowedGLImplementations(std::vector<GLImplementation>* impls) {
@@ -111,6 +118,10 @@ bool InitializeStaticGLBindings(GLImplementation implementation) {
// later switch to another GL implementation.
DCHECK_EQ(kGLImplementationNone, GetGLImplementation());
+ // Init ANGLE platform here, before we call GetPlatformDisplay().
+ // TODO(jmadill): Apply to all platforms eventually
+ angle::Platform::initialize(&g_angle_platform_impl.Get());
+
// Allow the main thread or another to initialize these bindings
// after instituting restrictions on I/O. Going forward they will
// likely be used in the browser process on most platforms. The
@@ -348,6 +359,9 @@ void InitializeDebugGLBindings() {
}
void ClearGLBindings() {
+ // TODO(jmadill): Apply to all platforms eventually
+ angle::Platform::shutdown();
+
ClearGLBindingsEGL();
ClearGLBindingsGL();
ClearGLBindingsOSMESA();