Bug 1112424 Part 2 - Implement MediaSource methods to return debug information for about:media - r=ajones

--HG--
extra : rebase_source : 192051cdea92aa39ecf2768a119f952761f25c68
This commit is contained in:
Chris Double 2015-01-29 15:35:58 +13:00
parent a9fd240a72
commit b89d511acb
4 changed files with 49 additions and 0 deletions

View File

@ -290,6 +290,12 @@ MediaSourceDecoder::PrepareReaderInitialization()
mReader->PrepareInitialization();
}
void
MediaSourceDecoder::GetMozDebugReaderData(nsAString& aString)
{
mReader->GetMozDebugReaderData(aString);
}
#ifdef MOZ_EME
nsresult
MediaSourceDecoder::SetCDMProxy(CDMProxy* aProxy)

View File

@ -79,6 +79,10 @@ public:
// reader in this decoders MediaSourceReader.
bool IsActiveReader(MediaDecoderReader* aReader);
// Returns a string describing the state of the MediaSource internal
// buffered data. Used for debugging purposes.
void GetMozDebugReaderData(nsAString& aString);
private:
void DoSetMediaSourceDuration(double aDuration);
void ScheduleDurationChange(double aOldDuration,

View File

@ -13,6 +13,7 @@
#include "MediaSourceUtils.h"
#include "SourceBufferDecoder.h"
#include "TrackBuffer.h"
#include "nsPrintfCString.h"
#ifdef MOZ_FMP4
#include "SharedDecoderManager.h"
@ -968,6 +969,40 @@ MediaSourceReader::SetMediaSourceDuration(double aDuration)
mMediaSourceDuration = aDuration;
}
void
MediaSourceReader::GetMozDebugReaderData(nsAString& aString)
{
ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
nsAutoCString result;
result += nsPrintfCString("Dumping data for reader %p:\n", this);
if (mAudioTrack) {
result += nsPrintfCString("\tDumping Audio Track Decoders: - mLastAudioTime: %f\n", double(mLastAudioTime) / USECS_PER_S);
for (int32_t i = mAudioTrack->Decoders().Length() - 1; i >= 0; --i) {
nsRefPtr<MediaDecoderReader> newReader = mAudioTrack->Decoders()[i]->GetReader();
nsRefPtr<dom::TimeRanges> ranges = new dom::TimeRanges();
mAudioTrack->Decoders()[i]->GetBuffered(ranges);
result += nsPrintfCString("\t\tReader %d: %p ranges=%s active=%s\n",
i, newReader.get(), DumpTimeRanges(ranges).get(),
newReader.get() == mAudioReader.get() ? "true" : "false");
}
}
if (mVideoTrack) {
result += nsPrintfCString("\tDumping Video Track Decoders - mLastVideoTime: %f\n", double(mLastVideoTime) / USECS_PER_S);
for (int32_t i = mVideoTrack->Decoders().Length() - 1; i >= 0; --i) {
nsRefPtr<MediaDecoderReader> newReader = mVideoTrack->Decoders()[i]->GetReader();
nsRefPtr<dom::TimeRanges> ranges = new dom::TimeRanges();
mVideoTrack->Decoders()[i]->GetBuffered(ranges);
result += nsPrintfCString("\t\tReader %d: %p ranges=%s active=%s\n",
i, newReader.get(), DumpTimeRanges(ranges).get(),
newReader.get() == mVideoReader.get() ? "true" : "false");
}
}
aString += NS_ConvertUTF8toUTF16(result);
}
#ifdef MOZ_EME
nsresult
MediaSourceReader::SetCDMProxy(CDMProxy* aProxy)

View File

@ -146,6 +146,10 @@ public:
// Returns true if aReader is a currently active audio or video
bool IsActiveReader(MediaDecoderReader* aReader);
// Returns a string describing the state of the MediaSource internal
// buffered data. Used for debugging purposes.
void GetMozDebugReaderData(nsAString& aString);
private:
// Switch the current audio/video reader to the reader that
// contains aTarget (or up to aError after target). Both