1d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//===-- formatters.cpp ------------------------------------------*- C++ -*-===//
2c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata//
3d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//                     The LLVM Compiler Infrastructure
4c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata//
5d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton// This file is distributed under the University of Illinois Open Source
6d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton// License. See LICENSE.TXT for details.
7c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata//
8d3a8d6565ff40fd99533f50a085ace806a9300eeGreg Clayton//===----------------------------------------------------------------------===//
9c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
10c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include <CoreFoundation/CoreFoundation.h>
11c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
12c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include "lldb-perf/lib/Timer.h"
13c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include "lldb-perf/lib/Metric.h"
14c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include "lldb-perf/lib/Measurement.h"
15c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include "lldb-perf/lib/TestCase.h"
16c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include "lldb-perf/lib/Xcode.h"
17c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
18c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include <iostream>
19c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include <unistd.h>
20c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata#include <fstream>
21c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
22af222500aa2ce2b18149277e561cdf75f2115df2Greg Claytonusing namespace lldb_perf;
23c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
24c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granataclass FormattersTest : public TestCase
25c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata{
26c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granatapublic:
27c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    FormattersTest () : TestCase()
28c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    {
29c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_std_vector_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
30af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,1,false);
31c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "std-vector", "time to dump an std::vector");
32c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_std_list_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
33af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,1,false);
34c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "std-list", "time to dump an std::list");
35c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_std_map_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
36af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,1,false);
37c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "std-map", "time to dump an std::map");
3821ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata
3921ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        // use this in manual mode
4021ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        m_dump_std_string_measurement = CreateTimeMeasurement([] () -> void {
41c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "std-string", "time to dump an std::string");
42c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
43c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsstring_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
44af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,0,false);
45c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "ns-string", "time to dump an NSString");
46c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
47c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsarray_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
48af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,1,false);
49c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "ns-array", "time to dump an NSArray");
50c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
51c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdictionary_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
52af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,1,false);
53c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "ns-dictionary", "time to dump an NSDictionary");
54c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
55c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsset_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
56af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,1,false);
57c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "ns-set", "time to dump an NSSet");
58c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
59c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsbundle_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
60af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,1,false);
61c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "ns-bundle", "time to dump an NSBundle");
62c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
63c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdate_measurement = CreateTimeMeasurement([] (SBValue value) -> void {
64af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            lldb_perf::Xcode::FetchVariable (value,0,false);
65c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }, "ns-date", "time to dump an NSDate");
66c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    }
67c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
68c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    virtual
69c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    ~FormattersTest ()
70c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    {
71c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    }
72c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
7391c570abdc2eb7f0d9bc5affb086d515838ebc39Greg Clayton    virtual bool
74b1b36ec6dcfbe7c7dfa423d50cb7c2296deca68eEnrico Granata	Setup (int& argc, const char**& argv)
75c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    {
76c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_app_path.assign(argv[1]);
77c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_out_path.assign(argv[2]);
78c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_target = m_debugger.CreateTarget(m_app_path.c_str());
79c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_target.BreakpointCreateByName("main");
8091c570abdc2eb7f0d9bc5affb086d515838ebc39Greg Clayton        SBLaunchInfo launch_info(argv);
8191c570abdc2eb7f0d9bc5affb086d515838ebc39Greg Clayton        return Launch (launch_info);
82c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    }
83c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
84c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    void
85c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    DoTest ()
86c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    {
8791c570abdc2eb7f0d9bc5affb086d515838ebc39Greg Clayton        SBFrame frame_zero(m_thread.GetFrameAtIndex(0));
88c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
89c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsarray_measurement(frame_zero.FindVariable("nsarray", lldb::eDynamicCanRunTarget));
90c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsarray_measurement(frame_zero.FindVariable("nsmutablearray", lldb::eDynamicCanRunTarget));
91c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
92c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdictionary_measurement(frame_zero.FindVariable("nsdictionary", lldb::eDynamicCanRunTarget));
93c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdictionary_measurement(frame_zero.FindVariable("nsmutabledictionary", lldb::eDynamicCanRunTarget));
94c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
95c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsstring_measurement(frame_zero.FindVariable("str0", lldb::eDynamicCanRunTarget));
96c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsstring_measurement(frame_zero.FindVariable("str1", lldb::eDynamicCanRunTarget));
97c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsstring_measurement(frame_zero.FindVariable("str2", lldb::eDynamicCanRunTarget));
98c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsstring_measurement(frame_zero.FindVariable("str3", lldb::eDynamicCanRunTarget));
99c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsstring_measurement(frame_zero.FindVariable("str4", lldb::eDynamicCanRunTarget));
100c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
101c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdate_measurement(frame_zero.FindVariable("me", lldb::eDynamicCanRunTarget));
102c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdate_measurement(frame_zero.FindVariable("cutie", lldb::eDynamicCanRunTarget));
103c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdate_measurement(frame_zero.FindVariable("mom", lldb::eDynamicCanRunTarget));
104c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdate_measurement(frame_zero.FindVariable("dad", lldb::eDynamicCanRunTarget));
105c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsdate_measurement(frame_zero.FindVariable("today", lldb::eDynamicCanRunTarget));
106c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
107c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsbundle_measurement(frame_zero.FindVariable("bundles", lldb::eDynamicCanRunTarget));
108c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsbundle_measurement(frame_zero.FindVariable("frameworks", lldb::eDynamicCanRunTarget));
109c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
110c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsset_measurement(frame_zero.FindVariable("nsset", lldb::eDynamicCanRunTarget));
111c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_nsset_measurement(frame_zero.FindVariable("nsmutableset", lldb::eDynamicCanRunTarget));
112c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
113c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_std_vector_measurement(frame_zero.FindVariable("vector", lldb::eDynamicCanRunTarget));
114c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_std_list_measurement(frame_zero.FindVariable("list", lldb::eDynamicCanRunTarget));
115c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        m_dump_std_map_measurement(frame_zero.FindVariable("map", lldb::eDynamicCanRunTarget));
116c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
11721ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        auto sstr0 = frame_zero.FindVariable("sstr0", lldb::eDynamicCanRunTarget);
11821ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        auto sstr1 = frame_zero.FindVariable("sstr1", lldb::eDynamicCanRunTarget);
11921ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        auto sstr2 = frame_zero.FindVariable("sstr2", lldb::eDynamicCanRunTarget);
12021ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        auto sstr3 = frame_zero.FindVariable("sstr3", lldb::eDynamicCanRunTarget);
12121ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        auto sstr4 = frame_zero.FindVariable("sstr4", lldb::eDynamicCanRunTarget);
12221ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata
12375fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Start();
12421ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        Xcode::FetchVariable(sstr0,0,false);
12575fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Stop();
12621ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata
12775fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Start();
12821ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        Xcode::FetchVariable(sstr1,0,false);
12975fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Stop();
13021ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata
13175fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Start();
13221ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        Xcode::FetchVariable(sstr2,0,false);
13375fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Stop();
13421ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata
13575fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Start();
13621ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        Xcode::FetchVariable(sstr3,0,false);
13775fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Stop();
13821ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata
13975fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Start();
14021ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata        Xcode::FetchVariable(sstr4,0,false);
14175fc5a74d95804e2ddc87bcade177640521147e0Greg Clayton        m_dump_std_string_measurement.Stop();
14221ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata
143c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    }
144c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
145af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton	virtual void
146af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton	TestStep (int counter, ActionWanted &next_action)
147c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    {
148af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton        switch (counter)
149c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        {
150af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 0:
1517905badf63cdca9b5eb26a81976edcaf67890c92Enrico Granata                m_target.BreakpointCreateByLocation("fmts_tester.mm", 78);
152af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
153af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
154af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 1:
155af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
156af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
157af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
158af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 2:
159af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
160af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
161af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
162af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 3:
163af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
164af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
165af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
166af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 4:
167af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
168af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
169af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
170af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 5:
171af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
172af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
173af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
174af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 6:
175af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
176af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
177af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
178af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 7:
179af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
180af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
181af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
182af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 8:
183af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
184af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
185af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
186af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 9:
187af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
188af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
189af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
190af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            case 10:
191af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                DoTest ();
192af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Continue();
193af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
194af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton            default:
195af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                next_action.Kill();
196af222500aa2ce2b18149277e561cdf75f2115df2Greg Clayton                break;
197c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata        }
198c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    }
199c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
2009de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    virtual void
2019de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton    WriteResults (Results &results)
202c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    {
2034d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_std_vector_measurement.WriteAverageAndStandardDeviation(results);
2044d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_std_list_measurement.WriteAverageAndStandardDeviation(results);
2054d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_std_map_measurement.WriteAverageAndStandardDeviation(results);
2064d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_std_string_measurement.WriteAverageAndStandardDeviation(results);
2074d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata
2084d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_nsstring_measurement.WriteAverageAndStandardDeviation(results);
2094d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_nsarray_measurement.WriteAverageAndStandardDeviation(results);
2104d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_nsdictionary_measurement.WriteAverageAndStandardDeviation(results);
2114d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_nsset_measurement.WriteAverageAndStandardDeviation(results);
2124d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_nsbundle_measurement.WriteAverageAndStandardDeviation(results);
2134d77c182b3b4fd418ccb488469aa18262bfe481bEnrico Granata        m_dump_nsdate_measurement.WriteAverageAndStandardDeviation(results);
2149de4dec874148d30cc1d4c498d38cd048a8164caGreg Clayton        results.Write(m_out_path.c_str());
215c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    }
216c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
217c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granataprivate:
218c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    // C++ formatters
219c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_std_vector_measurement;
220c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_std_list_measurement;
221c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_std_map_measurement;
22221ac3cbd69627081b1b35f1ff3fa50e72f751455Enrico Granata    TimeMeasurement<std::function<void()>> m_dump_std_string_measurement;
223c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
224c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    // Cocoa formatters
225c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_nsstring_measurement;
226c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_nsarray_measurement;
227c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_nsdictionary_measurement;
228c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_nsset_measurement;
229c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_nsbundle_measurement;
230c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TimeMeasurement<std::function<void(SBValue)>> m_dump_nsdate_measurement;
231c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
232c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    // useful files
233c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    std::string m_app_path;
234c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    std::string m_out_path;
235c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata};
236c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
237c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata// argv[1] == path to app
238c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata// argv[2] == path to result
239c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granataint main(int argc, const char * argv[])
240c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata{
241c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    FormattersTest frmtest;
242c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    frmtest.SetVerbose(true);
243c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    TestCase::Run(frmtest,argc,argv);
244c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata    return 0;
245c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata}
246c50fc4b658c46ef43b1add131391ecdd1f9bd752Enrico Granata
247