blob: 35bcfe04b2555e7ce96e5f0311252e55f4cbfb1e [file] [log] [blame]
// Copyright 2017 The Cobalt Authors. All Rights Reserved.
//
// 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 COBALT_BROWSER_MEMORY_TRACKER_TOOL_COMPRESSED_TIME_SERIES_TOOL_H_
#define COBALT_BROWSER_MEMORY_TRACKER_TOOL_COMPRESSED_TIME_SERIES_TOOL_H_
#include <string>
#include "base/basictypes.h"
#include "cobalt/browser/memory_tracker/tool/tool_impl.h"
#include "cobalt/browser/memory_tracker/tool/util.h"
#include "nb/analytics/memory_tracker.h"
namespace cobalt {
namespace browser {
namespace memory_tracker {
// Generates CSV values of the engine memory. This includes memory
// consumption in bytes and also the number of allocations.
// Allocations are segmented by category such as "Javascript" and "Network and
// are periodically dumped to the Params::abstract_logger_.
//
// Compression:
// During early run, the sampling rate is extremely high, however the sampling
// rate will degrade by half each time the sampling buffer fills up.
//
// Additionally, every time the sampling buffer fills up, space is freed by
// evicting every other element.
//
// Example output:
// //////////////////////////////////////////////
// // CSV of BYTES allocated per region (MB's).
// // Units are in Megabytes. This is designed
// // to be used in a stacked graph.
// "Time(mins)","CSS","DOM","Javascript","Media","base::MessageLoop"....
// 0,0,0,0,0,0...
// 1022.54,3.3,7.19,49.93,50.33....
// ...
// // END CSV of BYTES allocated per region.
// //////////////////////////////////////////////
//
// //////////////////////////////////////////////
// // CSV of COUNT of allocations per region.
// "Time(mins)","CSS","DOM","Javascript","Media","base::MessageLoop"....
// 0,0,0,0,0,0...
// 1022.54,57458,70011,423217,27,54495,43460...
// ...
// // END CSV of COUNT of allocations per region.
// //////////////////////////////////////////////
class CompressedTimeSeriesTool : public AbstractTool {
public:
CompressedTimeSeriesTool();
void Run(Params* params) override;
std::string tool_name() const override {
return "MemoryTrackerCompressedTimeSeries";
}
private:
static std::string ToCsvString(const TimeSeries& histogram);
static void AcquireSample(nb::analytics::MemoryTracker* memory_tracker,
TimeSeries* histogram, const base::TimeDelta& dt);
static bool IsFull(const TimeSeries& histogram, size_t num_samples);
static void Compress(TimeSeries* histogram);
const int number_samples_;
};
} // namespace memory_tracker
} // namespace browser
} // namespace cobalt
#endif // COBALT_BROWSER_MEMORY_TRACKER_TOOL_COMPRESSED_TIME_SERIES_TOOL_H_