1d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//===-- Gauge.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_Gauge_h
11f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#define PerfTestDriver_Gauge_h
12f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
13f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#include <functional>
149de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#include <string>
159de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
169de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton#include "Results.h"
179de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
1875fc5a74d95804e2ddc87bcade177640521147e0Greg Claytonnamespace lldb_perf {
1975fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton
209de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytontemplate <class T>
21f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granataclass Gauge
22f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata{
23f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granatapublic:
249de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    typedef T ValueType;
259de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
26f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    Gauge ()
27f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    {}
28f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
29f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    virtual
30f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    ~Gauge ()
31f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    {}
32f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
33f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata    virtual void
3475fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    Start () = 0;
35f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
369de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    virtual ValueType
3775fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton    Stop () = 0;
389de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
399de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    virtual ValueType
409de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    GetStartValue () const = 0;
419de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
429de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    virtual ValueType
439de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    GetStopValue () const = 0;
449de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
459de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    virtual ValueType
469de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    GetDeltaValue () const = 0;
47f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
48f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata};
499de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
509de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytontemplate <class T>
519de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonResults::ResultSP GetResult (const char *description, T value);
529de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
539de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytontemplate <>
549de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonResults::ResultSP GetResult (const char *description, double value);
559de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
569de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytontemplate <>
579de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonResults::ResultSP GetResult (const char *description, uint64_t value);
589de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
599de4dec874148d30cc1d4c498d38cd048a8164caGreg Claytontemplate <>
609de4dec874148d30cc1d4c498d38cd048a8164caGreg ClaytonResults::ResultSP GetResult (const char *description, std::string value);
619de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton
62af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton}
63f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata
64f5af85a2946ed4e1ff4766829d328cfb4961f259Enrico Granata#endif
65