1d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//===-- Metric.h ------------------------------------------------*- C++ -*-===//
2f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//
3d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//                     The LLVM Compiler Infrastructure
4f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//
5d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton// This file is distributed under the University of Illinois Open Source
6d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton// License. See LICENSE.TXT for details.
7f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata//
8d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//===----------------------------------------------------------------------===//
9f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
10f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#ifndef __PerfTestDriver__Metric__
11f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#define __PerfTestDriver__Metric__
12f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
13f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include <vector>
14f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include <string>
15f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include <mach/task_info.h>
16f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
1775fc5a74d95804e2ddc87bcade177640521147e0Greg Claytonnamespace lldb_perf {
1875fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton
1953bba61c0b9f3b3ceff5835f79d61efa0d81847cEnrico Granataclass MemoryStats;
2075fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton
21f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatatemplate <class ValueType>
22d2c50b1793f69af4d09b5ba364dc0a1a88ec26f5Greg Claytonclass Metric
2375fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton{
24f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatapublic:
25ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata    enum class StandardDeviationMode
26ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata    {
27ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata        eSample,
28ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata        ePopulation
29ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata    };
30ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata
31f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    Metric ();
32c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    Metric (const char*, const char* = NULL);
33f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
34f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    void
3575fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    Append (ValueType v);
36f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
37f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    ValueType
3875fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    GetAverage () const;
3975fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton
4075fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    size_t
4175fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    GetCount () const;
42f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
43f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    ValueType
4475fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    GetSum () const;
45f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
4608257e457b2aab6453618cb64c033e5a64115da1Enrico Granata    ValueType
47ec87e5c098f1ce1c9182d1c5438e0beca0996597Enrico Granata    GetStandardDeviation (StandardDeviationMode mode = StandardDeviationMode::ePopulation) const;
4808257e457b2aab6453618cb64c033e5a64115da1Enrico Granata
49f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    const char*
509de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    GetName () const
5175fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    {
529de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        if (m_name.empty())
539de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return NULL;
5475fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        return m_name.c_str();
5575fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    }
5675fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton
57c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    const char*
589de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    GetDescription () const
5975fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    {
609de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        if (m_description.empty())
619de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton            return NULL;
6275fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        return m_description.c_str();
6375fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    }
64f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
659de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytonprivate:
66f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    std::string m_name;
67c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    std::string m_description;
68f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    std::vector<ValueType> m_dataset;
69f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata};
70af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton}
71f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
72f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#endif /* defined(__PerfTestDriver__Metric__) */
73