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

Side by Side Diff: content/common/gpu/client/command_buffer_metrics.cc

Issue 1095893002: gpu: Fix some context lost marking glitches+leaks and add UMA stats (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: histogram fixes Created 5 years, 8 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/common/gpu/client/command_buffer_metrics.h"
6
7 #include "base/metrics/histogram.h"
8
9 namespace content {
10
11 namespace {
12
13 enum CommandBufferContextLostReason {
14 // Don't add new values here.
15 CONTEXT_INIT_FAILED,
16 CONTEXT_LOST_GPU_CHANNEL_ERROR,
17 CONTEXT_PARSE_ERROR_INVALID_SIZE,
18 CONTEXT_PARSE_ERROR_OUT_OF_BOUNDS,
19 CONTEXT_PARSE_ERROR_UNKNOWN_COMMAND,
20 CONTEXT_PARSE_ERROR_INVALID_ARGS,
21 CONTEXT_PARSE_ERROR_GENERIC_ERROR,
22 CONTEXT_LOST_GUILTY,
23 CONTEXT_LOST_INNOCENT,
24 CONTEXT_LOST_UNKNOWN,
25 CONTEXT_LOST_OUT_OF_MEMORY,
26 CONTEXT_LOST_MAKECURRENT_FAILED,
27 // Add new values here and update _MAX_ENUM.
28 CONTEXT_LOST_REASON_MAX_ENUM = CONTEXT_LOST_MAKECURRENT_FAILED
29 };
30
31 CommandBufferContextLostReason GetContextLostReason(
32 gpu::error::Error error,
33 gpu::error::ContextLostReason reason) {
34 if (error == gpu::error::kLostContext) {
35 switch (reason) {
36 case gpu::error::kGuilty:
37 return CONTEXT_LOST_GUILTY;
38 case gpu::error::kInnocent:
39 return CONTEXT_LOST_INNOCENT;
40 case gpu::error::kUnknown:
41 return CONTEXT_LOST_UNKNOWN;
42 case gpu::error::kOutOfMemory:
43 return CONTEXT_LOST_OUT_OF_MEMORY;
44 case gpu::error::kMakeCurrentFailed:
45 return CONTEXT_LOST_MAKECURRENT_FAILED;
46 }
47 }
48 switch (error) {
49 case gpu::error::kInvalidSize:
50 return CONTEXT_PARSE_ERROR_INVALID_SIZE;
51 case gpu::error::kOutOfBounds:
52 return CONTEXT_PARSE_ERROR_OUT_OF_BOUNDS;
53 case gpu::error::kUnknownCommand:
54 return CONTEXT_PARSE_ERROR_UNKNOWN_COMMAND;
55 case gpu::error::kInvalidArguments:
56 return CONTEXT_PARSE_ERROR_INVALID_ARGS;
57 case gpu::error::kGenericError:
58 return CONTEXT_PARSE_ERROR_GENERIC_ERROR;
59 case gpu::error::kDeferCommandUntilLater:
60 case gpu::error::kNoError:
61 case gpu::error::kLostContext:
62 NOTREACHED();
63 return CONTEXT_LOST_UNKNOWN;
64 }
65 NOTREACHED();
66 return CONTEXT_LOST_UNKNOWN;
67 }
68
69 } // anonymous namespace
70
71 std::string CommandBufferContextTypeToString(CommandBufferContextType type) {
72 switch (type) {
73 case OFFSCREEN_CONTEXT_FOR_TESTING:
74 return "Context-For-Testing";
75 case BROWSER_COMPOSITOR_ONSCREEN_CONTEXT:
76 return "Compositor";
77 case BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT:
78 return "Offscreen-MainThread";
79 case RENDER_COMPOSITOR_CONTEXT:
80 return "RenderCompositor";
81 case RENDER_WORKER_CONTEXT:
82 return "RenderWorker";
83 case RENDERER_MAINTHREAD_CONTEXT:
84 return "Offscreen-MainThread";
85 case GPU_VIDEO_ACCELERATOR_CONTEXT:
86 return "GPU-VideoAccelerator-Offscreen";
87 case OFFSCREEN_VIDEO_CAPTURE_CONTEXT:
88 return "Offscreen-CaptureThread";
89 case OFFSCREEN_CONTEXT_FOR_WEBGL:
90 return "Offscreen-For-WebGL";
91 default:
92 NOTREACHED();
93 return "unknown";
94 }
95 }
96
97 void UmaRecordContextInitFailed(CommandBufferContextType type) {
98 switch (type) {
99 case BROWSER_COMPOSITOR_ONSCREEN_CONTEXT:
100 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.BrowserCompositor",
101 CONTEXT_INIT_FAILED,
102 CONTEXT_LOST_REASON_MAX_ENUM);
103 break;
104 case BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT:
105 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.BrowserMainThread",
106 CONTEXT_INIT_FAILED,
107 CONTEXT_LOST_REASON_MAX_ENUM);
108 break;
109 case RENDER_COMPOSITOR_CONTEXT:
110 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.RenderCompositor",
111 CONTEXT_INIT_FAILED,
112 CONTEXT_LOST_REASON_MAX_ENUM);
113 break;
114 case RENDER_WORKER_CONTEXT:
115 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.RenderWorker",
116 CONTEXT_INIT_FAILED,
117 CONTEXT_LOST_REASON_MAX_ENUM);
118 break;
119 case RENDERER_MAINTHREAD_CONTEXT:
120 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.RenderMainThread",
121 CONTEXT_INIT_FAILED,
122 CONTEXT_LOST_REASON_MAX_ENUM);
123 break;
124 case GPU_VIDEO_ACCELERATOR_CONTEXT:
125 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.VideoAccelerator",
126 CONTEXT_INIT_FAILED,
127 CONTEXT_LOST_REASON_MAX_ENUM);
128 break;
129 case OFFSCREEN_VIDEO_CAPTURE_CONTEXT:
130 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.VideoCapture",
131 CONTEXT_INIT_FAILED,
132 CONTEXT_LOST_REASON_MAX_ENUM);
133 break;
134 case OFFSCREEN_CONTEXT_FOR_WEBGL:
135 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.WebGL", CONTEXT_INIT_FAILED,
136 CONTEXT_LOST_REASON_MAX_ENUM);
137 break;
138 case CONTEXT_TYPE_UNKNOWN:
139 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.Unknown", CONTEXT_INIT_FAILED,
140 CONTEXT_LOST_REASON_MAX_ENUM);
141 break;
142 }
143 }
144
145 void UmaRecordContextLost(CommandBufferContextType type,
146 gpu::error::Error error,
147 gpu::error::ContextLostReason reason) {
148 CommandBufferContextLostReason converted_reason =
149 GetContextLostReason(error, reason);
150 switch (type) {
Alexei Svitkine (slow) 2015/04/24 20:01:31 To avoid having the switches in two places, you ca
no sievers 2015/04/24 20:12:50 Done.
151 case BROWSER_COMPOSITOR_ONSCREEN_CONTEXT:
152 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.BrowserCompositor",
153 converted_reason, CONTEXT_LOST_REASON_MAX_ENUM);
154 break;
155 case BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT:
156 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.BrowserMainThread",
157 converted_reason, CONTEXT_LOST_REASON_MAX_ENUM);
158 break;
159 case RENDER_COMPOSITOR_CONTEXT:
160 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.RenderCompositor",
161 converted_reason, CONTEXT_LOST_REASON_MAX_ENUM);
162 break;
163 case RENDER_WORKER_CONTEXT:
164 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.RenderWorker",
165 converted_reason, CONTEXT_LOST_REASON_MAX_ENUM);
166 break;
167 case RENDERER_MAINTHREAD_CONTEXT:
168 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.RenderMainThread",
169 converted_reason, CONTEXT_LOST_REASON_MAX_ENUM);
170 break;
171 case GPU_VIDEO_ACCELERATOR_CONTEXT:
172 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.VideoAccelerator",
173 converted_reason, CONTEXT_LOST_REASON_MAX_ENUM);
174 break;
175 case OFFSCREEN_VIDEO_CAPTURE_CONTEXT:
176 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.VideoCapture",
177 converted_reason, CONTEXT_LOST_REASON_MAX_ENUM);
178 break;
179 case OFFSCREEN_CONTEXT_FOR_WEBGL:
180 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.WebGL", converted_reason,
181 CONTEXT_LOST_REASON_MAX_ENUM);
182 break;
183 case CONTEXT_TYPE_UNKNOWN:
184 UMA_HISTOGRAM_ENUMERATION("GPU.ContextLost.Unknown", converted_reason,
185 CONTEXT_LOST_REASON_MAX_ENUM);
186 break;
187 }
188 }
189
190 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698