blob: 8bcebb8caa881b5044d02934bd6173bd62214b7c [file] [log] [blame]
// Copyright 2017 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 "remoting/host/process_stats_sender.h"
#include <utility>
#include "base/location.h"
#include "base/logging.h"
#include "remoting/host/process_stats_agent.h"
#include "remoting/host/process_stats_util.h"
namespace remoting {
ProcessStatsSender::ProcessStatsSender(
protocol::ProcessStatsStub* host_stats_stub,
base::TimeDelta interval,
std::initializer_list<ProcessStatsAgent*> agents)
: host_stats_stub_(host_stats_stub),
agents_(agents),
thread_checker_() {
DCHECK(thread_checker_.CalledOnValidThread());
DCHECK(host_stats_stub_);
DCHECK(interval > base::TimeDelta());
DCHECK(!agents_.empty());
timer_.Start(FROM_HERE, interval, this, &ProcessStatsSender::ReportUsage);
}
ProcessStatsSender::~ProcessStatsSender() {
DCHECK(thread_checker_.CalledOnValidThread());
timer_.Stop();
}
void ProcessStatsSender::ReportUsage() {
DCHECK(thread_checker_.CalledOnValidThread());
std::vector<protocol::ProcessResourceUsage> usages;
for (auto* const agent : agents_) {
DCHECK(agent);
protocol::ProcessResourceUsage usage = agent->GetResourceUsage();
if (!IsEmptyProcessResourceUsage(usage)) {
usages.push_back(std::move(usage));
}
}
host_stats_stub_->OnProcessStats(AggregateProcessResourceUsage(usages));
}
} // namespace remoting