This file is indexed.

/usr/include/osgEarth/Metrics is in libosgearth-dev 2.9.0+dfsg-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
/* -*-c++-*- */
/* osgEarth - Dynamic map generation toolkit for OpenSceneGraph
 * Copyright 2008-2012 Pelican Mapping
 * http://osgearth.org
 *
 * osgEarth is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */

#ifndef OSGEARTH_METRICS_H
#define OSGEARTH_METRICS_H 1

#include <osgEarth/Common>
#include <osgEarth/Config>
#include <iostream>
#include <osgDB/fstream>

// forward
namespace osgViewer {
    class Viewer;
}

namespace osgEarth
{
    /**
     * Interface for a class that handles collecting metrics.
     */
    class OSGEARTH_EXPORT MetricsBackend : public osg::Referenced
    {
    public:
        /**
         * Begins an event.
         * @param name
         *        The name of the event
         * @param args
         *        The arguments to the event.
         */
        virtual void begin(const std::string& name, const Config& args =Config()) = 0;

        /**
         * Ends an event
         * @param name
         *        The name of the event.
         * @param args
         *        The arguments to the event.
         */
        virtual void end(const std::string& name, const Config& args =Config()) = 0;

        /**
         * A counter event
         * @param graph
         *        The graph to display the counters on.
         * @param name0
         *        The name of the first counter.
         * @param value0
         *        The value of the first counter.
         * @param name1
         *        The name of the second counter.
         * @param value1
         *        The value of the second counter.
         * @param name2
         *        The name of the third counter.
         * @param value2
         *        The value of the third counter.
         */
        virtual void counter(const std::string& graph,
                             const std::string& name0, double value0,
                             const std::string& name1, double value1,
                             const std::string& name2, double value2) = 0;
    };

    /**
     * A MetricsProvider that uses the chrome://tracing format as described here: http://www.gamasutra.com/view/news/176420/Indepth_Using_Chrometracing_to_view_your_inline_profiling_data.php
     * https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit?pli=1#
     */
    class OSGEARTH_EXPORT ChromeMetricsBackend : public MetricsBackend
    {
    public:
        ChromeMetricsBackend(const std::string& filename);
        ~ChromeMetricsBackend();

        virtual void begin(const std::string& name, const Config& args =Config());
        virtual void end(const std::string& name, const Config& args =Config());
        

        /**
         * A counter event
         * @param graph
         *        The graph to display the counters on.
         * @param name0
         *        The name of the first counter.
         * @param value0
         *        The value of the first counter.
         * @param name1
         *        The name of the second counter.
         * @param value1
         *        The value of the second counter.
         * @param name2
         *        The name of the third counter.
         * @param value2
         *        The value of the third counter.
         */
        virtual void counter(const std::string& graph,
                             const std::string& name0, double value0,
                             const std::string& name1, double value1,
                             const std::string& name2, double value2);

    protected:
        std::ofstream _metricsFile;
        OpenThreads::Mutex _mutex;    
        bool _firstEvent;
        osg::Timer_t _startTime;
    };

    class OSGEARTH_EXPORT Metrics
    {
    public:
        /**
         * Begins an event.
         * @param name
         *        The name of the event
         * @param args
         *        The arguments to the event.
         */
        static void begin(const std::string& name, const Config& args =Config());


        /**
         * Begins an event with a variable number of arguments
         * @param name
         *        The name of the event
         * @param argCount
         *        The number of argument pairs (key, value) that will 
         */
        static void begin(const std::string& name, unsigned int argCount, ...);

        /**
         * Ends an event with a variable number of arguments
         * @param name
         *        The name of the event
         * @param argCount
         *        The number of argument pairs (key, value) that will 

         */
        static void end(const std::string& name, unsigned int argCount, ...);

        /**
         * Ends an event
         * @param name
         *        The name of the event.
         * @param args
         *        The arguments to the event.
         */
        static void end(const std::string& name,  const Config& args = Config());

        /**
         * A counter event
         * @param graph
         *        The graph to display the counters on.
         * @param name0
         *        The name of the first counter.
         * @param value0
         *        The value of the first counter.         
         */
        static void counter(const std::string& graph,const std::string& name0, double value0);
           
        /**
         * A counter event
         * @param graph
         *        The graph to display the counters on.
         * @param name0
         *        The name of the first counter.
         * @param value0
         *        The value of the first counter.
         * @param name1
         *        The name of the second counter.
         * @param value1
         *        The value of the second counter.
         */
        static void counter(const std::string& graph,const std::string& name0, double value0,
                                                     const std::string& name1, double value1);

        /**
         * A counter event
         * @param graph
         *        The graph to display the counters on.
         * @param name0
         *        The name of the first counter.
         * @param value0
         *        The value of the first counter.
         * @param name1
         *        The name of the second counter.
         * @param value1
         *        The value of the second counter.
         * @param name2
         *        The name of the third counter.
         * @param value2
         *        The value of the third counter.
         */
        static void counter(const std::string& graph,const std::string& name0, double value0,
                                                     const std::string& name1, double value1,
                                                     const std::string& name2, double value2);

        /**
         * Gets the metrics backend.
         */
        static MetricsBackend* getMetricsBackend();

        /*
         * Whether metrics collection is enabled.  Equivalent to checking getMetricsBackend != NULL;
         */
        static bool enabled();

        /**
         * Sets the MetricsBackend
         */
        static void setMetricsBackend( MetricsBackend* backend );

        /**
         * Encodes varargs into a Config object for serialization by the metrics backend
         */
        static Config encodeArgs(unsigned count, ...);

        /**
         * Convenience function to run the OSG frame loop with metrics.
         */
        static int run(osgViewer::Viewer& viewer);
    };

    /**
     * Utility that lets you start and stop metrics with a single line of code
     * @example
     * void myFunction() {
     *     ScopedMetric("myFunction");
     *     ...do some work
     * }
     */
    class OSGEARTH_EXPORT ScopedMetric
    {
    public:
        ScopedMetric(const std::string& name);
        ScopedMetric(const std::string& name, const Config& args);
        ScopedMetric(const std::string& name, int argCount, ...);
        ~ScopedMetric();
        std::string _name;
    };

#define METRIC_BEGIN(...) if (osgEarth::Metrics::enabled()) osgEarth::Metrics::begin(__VA_ARGS__)

#define METRIC_END(...)   if (osgEarth::Metrics::enabled()) osgEarth::Metrics::end(__VA_ARGS__)
    
#define METRIC_SCOPED(NAME) \
    osgEarth::ScopedMetric scoped_metric__(NAME) 

#define METRIC_SCOPED_EX(NAME, COUNT, ...) \
    osgEarth::ScopedMetric scoped_metric__(NAME, osgEarth::Metrics::enabled() ? osgEarth::Metrics::encodeArgs(COUNT, __VA_ARGS__) : osgEarth::Config())
};

#endif