blob: 2edad332fee164c403e0e6d0d362febff1a00cdd [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/thumbnails/thumbnail_stats_tracker.h"
#include "base/bind.h"
#include "base/location.h"
#include "base/metrics/histogram_macros.h"
#include "base/no_destructor.h"
#include "base/time/time.h"
#include "chrome/browser/ui/thumbnails/thumbnail_image.h"
namespace {
// Global instance. Only set once, except in tests which can reset the
// instance and create a new one.
ThumbnailStatsTracker* g_instance = nullptr;
} // namespace
// static
constexpr base::TimeDelta ThumbnailStatsTracker::kReportingInterval;
// static
ThumbnailStatsTracker& ThumbnailStatsTracker::GetInstance() {
if (!g_instance)
g_instance = new ThumbnailStatsTracker;
return *g_instance;
}
// static
void ThumbnailStatsTracker::ResetInstanceForTesting() {
delete g_instance;
g_instance = nullptr;
}
ThumbnailStatsTracker::ThumbnailStatsTracker() {
heartbeat_timer_.Start(
FROM_HERE, kReportingInterval,
base::BindRepeating(&ThumbnailStatsTracker::RecordMetrics,
base::Unretained(this)));
}
ThumbnailStatsTracker::~ThumbnailStatsTracker() {
// This is only called from tests. Make sure there are no thumbnails left.
DCHECK_EQ(thumbnails_.size(), 0u);
}
void ThumbnailStatsTracker::AddThumbnail(ThumbnailImage* thumbnail) {
auto result = thumbnails_.insert(thumbnail);
DCHECK(result.second) << "Thumbnail already added";
}
void ThumbnailStatsTracker::RemoveThumbnail(ThumbnailImage* thumbnail) {
int removed = thumbnails_.erase(thumbnail);
DCHECK_EQ(removed, 1) << "Thumbnail not added";
}
void ThumbnailStatsTracker::RecordMetrics() {
size_t total_size_bytes = 0;
for (ThumbnailImage* thumbnail : thumbnails_) {
size_t thumbnail_size_bytes = thumbnail->GetCompressedDataSizeInBytes();
total_size_bytes += thumbnail_size_bytes;
size_t thumbnail_size_kb = thumbnail_size_bytes / 1024;
UMA_HISTOGRAM_COUNTS_100(
"Tab.Preview.MemoryUsage.CompressedData.PerThumbnailKiB",
thumbnail_size_kb);
}
size_t total_size_kb = total_size_bytes / 1024;
UMA_HISTOGRAM_CUSTOM_COUNTS("Tab.Preview.MemoryUsage.CompressedData.TotalKiB",
total_size_kb, 32, 8192, 50);
}