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