New method StatsObserver::OnCompleteReports, passing ownership.

The new name, OnCompleteReports rather than OnComplete, is needed
because in C++ method lookup, overriding a method hides all otherwise
inherited methods with the same name, even if they have a different
signature. And here, the intention is that each subclass should
override one or the other of the two methods, and inherit the method it
doesn't override.

This cl is a prerequisite for
https://codereview.webrtc.org/2567143003/, because the Chrome glue
code needs to retain the stats report after the OnComplete method has
returned.

Currently, Chrome makes a copy of the stats mapping (which breaks when
changing ValuePtr from an rtc::linked_ptr to an std::unique_ptr). After
this cl, Chrome can be fixed to take ownership and no longer needs to
copy anything, unblocking cl 2567143003.

BUG=webrtc:6424

Review-Url: https://codereview.webrtc.org/2584553002
Cr-Commit-Position: refs/heads/master@{#15708}
This commit is contained in:
nisse
2016-12-20 03:30:00 -08:00
committed by Commit bot
parent 5206667dad
commit b36ee8d498
5 changed files with 19 additions and 12 deletions

View File

@ -29,10 +29,10 @@ class StatsObserverAdapter : public StatsObserver {
completion_handler_ = nil;
}
void OnComplete(const StatsReports& reports) override {
void OnCompleteReports(std::unique_ptr<StatsReports> reports) override {
RTC_DCHECK(completion_handler_);
NSMutableArray *stats = [NSMutableArray arrayWithCapacity:reports.size()];
for (const auto* report : reports) {
NSMutableArray *stats = [NSMutableArray arrayWithCapacity:reports->size()];
for (const auto* report : *reports) {
RTCLegacyStatsReport *statsReport =
[[RTCLegacyStatsReport alloc] initWithNativeReport:*report];
[stats addObject:statsReport];