diff options
Diffstat (limited to 'gfx/2d/DrawEventRecorder.cpp')
-rw-r--r-- | gfx/2d/DrawEventRecorder.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/gfx/2d/DrawEventRecorder.cpp b/gfx/2d/DrawEventRecorder.cpp new file mode 100644 index 000000000..0e20b8b5a --- /dev/null +++ b/gfx/2d/DrawEventRecorder.cpp @@ -0,0 +1,117 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "DrawEventRecorder.h" +#include "PathRecording.h" +#include "RecordingTypes.h" + +namespace mozilla { +namespace gfx { + +using namespace std; + +DrawEventRecorderPrivate::DrawEventRecorderPrivate(std::ostream *aStream) + : mOutputStream(aStream) +{ +} + +void +DrawEventRecorderPrivate::WriteHeader() +{ + WriteElement(*mOutputStream, kMagicInt); + WriteElement(*mOutputStream, kMajorRevision); + WriteElement(*mOutputStream, kMinorRevision); +} + +void +DrawEventRecorderPrivate::RecordEvent(const RecordedEvent &aEvent) +{ + WriteElement(*mOutputStream, aEvent.mType); + + aEvent.RecordToStream(*mOutputStream); + + Flush(); +} + +DrawEventRecorderFile::DrawEventRecorderFile(const char *aFilename) + : DrawEventRecorderPrivate(nullptr) + , mOutputFile(aFilename, ofstream::binary) +{ + mOutputStream = &mOutputFile; + + WriteHeader(); +} + +DrawEventRecorderFile::~DrawEventRecorderFile() +{ + mOutputFile.close(); +} + +void +DrawEventRecorderFile::Flush() +{ + mOutputFile.flush(); +} + +bool +DrawEventRecorderFile::IsOpen() +{ + return mOutputFile.is_open(); +} + +void +DrawEventRecorderFile::OpenNew(const char *aFilename) +{ + MOZ_ASSERT(!mOutputFile.is_open()); + + mOutputFile.open(aFilename, ofstream::binary); + WriteHeader(); +} + +void +DrawEventRecorderFile::Close() +{ + MOZ_ASSERT(mOutputFile.is_open()); + + mOutputFile.close(); +} + +DrawEventRecorderMemory::DrawEventRecorderMemory() + : DrawEventRecorderPrivate(nullptr) +{ + mOutputStream = &mMemoryStream; + + WriteHeader(); +} + +void +DrawEventRecorderMemory::Flush() +{ + mOutputStream->flush(); +} + +size_t +DrawEventRecorderMemory::RecordingSize() +{ + return mMemoryStream.tellp(); +} + +bool +DrawEventRecorderMemory::CopyRecording(char* aBuffer, size_t aBufferLen) +{ + return !!mMemoryStream.read(aBuffer, aBufferLen); +} + +void +DrawEventRecorderMemory::WipeRecording() +{ + mMemoryStream.str(std::string()); + mMemoryStream.clear(); + + WriteHeader(); +} + +} // namespace gfx +} // namespace mozilla |