• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 The ChromiumOS Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 use std::convert::From;
6 use std::convert::TryFrom;
7 
8 use anyhow::Error;
9 use serde::Deserialize;
10 use serde::Serialize;
11 
12 // TODO(mikehoyle): Create a way to generate these directly from the
13 // proto for a single source-of-truth.
14 #[derive(Copy, Clone, Debug, Serialize, Deserialize)]
15 pub enum MetricEventType {
16     CpuUsage,
17     MemoryUsage,
18     Fps,
19     JankyFps,
20     NetworkTxRate,
21     NetworkRxRate,
22     Interrupts,
23     FrameTime,
24     EmulatorGraphicsFreeze,
25     EmulatorGraphicsUnfreeze,
26     EmulatorGfxstreamVkAbortReason,
27     ChildProcessExit,
28     ReadIo,
29     WriteIo,
30     AudioFormatRequestOk,
31     AudioFormatModifiedOk,
32     AudioFormatFailed,
33     TscCoresOutOfSync,
34     NetworkTxRateSummarized,
35     NetworkRxRateSummarized,
36     DllLoaded,
37     GraphicsHangRenderThread,
38     GraphicsHangSyncThread,
39     Other(i64),
40 }
41 
42 impl From<MetricEventType> for i64 {
from(event_code: MetricEventType) -> Self43     fn from(event_code: MetricEventType) -> Self {
44         match event_code {
45             MetricEventType::CpuUsage => 10001,
46             MetricEventType::MemoryUsage => 10002,
47             MetricEventType::Fps => 10003,
48             MetricEventType::JankyFps => 10004,
49             MetricEventType::NetworkTxRate => 10005,
50             MetricEventType::NetworkRxRate => 10006,
51             MetricEventType::Interrupts => 10007,
52             MetricEventType::FrameTime => 10008,
53             MetricEventType::EmulatorGraphicsFreeze => 10009,
54             MetricEventType::EmulatorGraphicsUnfreeze => 10010,
55             MetricEventType::EmulatorGfxstreamVkAbortReason => 10011,
56             MetricEventType::ChildProcessExit => 10012,
57             MetricEventType::ReadIo => 10013,
58             MetricEventType::WriteIo => 10014,
59             MetricEventType::AudioFormatRequestOk => 10015,
60             MetricEventType::AudioFormatModifiedOk => 10016,
61             MetricEventType::AudioFormatFailed => 10017,
62             MetricEventType::TscCoresOutOfSync => 10018,
63             MetricEventType::NetworkTxRateSummarized => 10019,
64             MetricEventType::NetworkRxRateSummarized => 10020,
65             MetricEventType::DllLoaded => 10021,
66             MetricEventType::GraphicsHangRenderThread => 10024,
67             MetricEventType::GraphicsHangSyncThread => 10026,
68             MetricEventType::Other(code) => code,
69         }
70     }
71 }
72 
73 impl TryFrom<i64> for MetricEventType {
74     type Error = Error;
75 
try_from(event_code: i64) -> Result<Self, Self::Error>76     fn try_from(event_code: i64) -> Result<Self, Self::Error> {
77         match event_code {
78             10001 => Ok(MetricEventType::CpuUsage),
79             10002 => Ok(MetricEventType::MemoryUsage),
80             10003 => Ok(MetricEventType::Fps),
81             10004 => Ok(MetricEventType::JankyFps),
82             10005 => Ok(MetricEventType::NetworkTxRate),
83             10006 => Ok(MetricEventType::NetworkRxRate),
84             10007 => Ok(MetricEventType::Interrupts),
85             10008 => Ok(MetricEventType::FrameTime),
86             10009 => Ok(MetricEventType::EmulatorGraphicsFreeze),
87             10010 => Ok(MetricEventType::EmulatorGraphicsUnfreeze),
88             10011 => Ok(MetricEventType::EmulatorGfxstreamVkAbortReason),
89             10012 => Ok(MetricEventType::ChildProcessExit),
90             10013 => Ok(MetricEventType::ReadIo),
91             10014 => Ok(MetricEventType::WriteIo),
92             10015 => Ok(MetricEventType::AudioFormatRequestOk),
93             10016 => Ok(MetricEventType::AudioFormatModifiedOk),
94             10017 => Ok(MetricEventType::AudioFormatFailed),
95             10018 => Ok(MetricEventType::TscCoresOutOfSync),
96             10019 => Ok(MetricEventType::NetworkTxRateSummarized),
97             10020 => Ok(MetricEventType::NetworkRxRateSummarized),
98             10021 => Ok(MetricEventType::DllLoaded),
99             10024 => Ok(MetricEventType::GraphicsHangRenderThread),
100             10026 => Ok(MetricEventType::GraphicsHangSyncThread),
101             _ => Ok(MetricEventType::Other(event_code)),
102         }
103     }
104 }
105