summaryrefslogtreecommitdiff
path: root/perfstatsd/include/statstype.h
blob: c00655c6b69df61bf5b4e32ea4a0c2445621c3d9 (plain)
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
/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef _STATSTYPE_H_
#define _STATSTYPE_H_

#include <perfstats_buffer.h>

namespace android {
namespace pixel {
namespace perfstatsd {

class StatsType : public RefBase {
  public:
    virtual void refresh() = 0;
    virtual void setOptions(const std::string &, const std::string &) = 0;
    void dump(std::priority_queue<StatsData, std::vector<StatsData>, StatsdataCompare> *queue) {
        std::unique_lock<std::mutex> mlock(mMutex);
        std::queue<StatsData> buffer = mBuffer.dump();
        while (!buffer.empty()) {
            queue->push(buffer.front());
            buffer.pop();
        }
    }
    size_t bufferSize() { return mBuffer.size(); }
    void setBufferSize(size_t size) { mBuffer.setSize(size); }
    size_t bufferCount() { return mBuffer.count(); }

  protected:
    void append(StatsData &&data) {
        std::unique_lock<std::mutex> mlock(mMutex);
        mBuffer.emplace(std::forward<StatsData>(data));
    }
    void append(std::chrono::system_clock::time_point &time, std::string &content) {
        StatsData data;
        data.setTime(time);
        data.setData(content);
        append(std::move(data));
    }
    void append(std::string &content) {
        std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
        append(now, content);
    }

  private:
    PerfstatsBuffer mBuffer;
    std::mutex mMutex;
};

}  // namespace perfstatsd
}  // namespace pixel
}  // namespace android

#endif /* _STATSTYPE_H_ */