/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* 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/. */
RefPtr<DataSourceSurface> dataSurf = aSurface->GetDataSurface();
IntSize surfaceSize = aSurface->GetSize();
Maybe<DataSourceSurface::ScopedMap> map; if (dataSurf) {
map.emplace(dataSurf, DataSourceSurface::READ);
} if (!dataSurf || !map->IsMapped() ||
!Factory::AllowedSurfaceSize(surfaceSize)) {
gfxWarning() << "Recording failed to record SourceSurface for " << aReason;
// If surface size is not allowed, replace with reasonable size. if (!Factory::AllowedSurfaceSize(surfaceSize)) {
surfaceSize.width = std::min(surfaceSize.width, kReasonableSurfaceSize);
surfaceSize.height = std::min(surfaceSize.height, kReasonableSurfaceSize);
}
// Insert a dummy source surface.
int32_t stride = surfaceSize.width * BytesPerPixel(aSurface->GetFormat());
UniquePtr<uint8_t[]> sourceData =
MakeUniqueFallible<uint8_t[]>(stride * surfaceSize.height); if (!sourceData) { // If the surface is too big just create a 1 x 1 dummy.
surfaceSize.width = 1;
surfaceSize.height = 1;
stride = surfaceSize.width * BytesPerPixel(aSurface->GetFormat());
sourceData = MakeUnique<uint8_t[]>(stride * surfaceSize.height);
}
MOZ_RELEASE_ASSERT(!aRect.IsEmpty()); // Detaching our existing resources will add some // destruction events to our stream so we need to do that // first.
DetachResources();
// See moz2d_renderer.rs for a description of the stream format
WriteElement(mIndex, mOutputStream.mLength);
// write out the fonts into the extra data section
mSerializeCallback(mOutputStream, mScaledFonts);
WriteElement(mIndex, mOutputStream.mLength);
// this length might be 0, and things should still work. // for example if there are no items in a particular area
size_t indexOffset = mOutputStream.mLength; // write out the index
mOutputStream.write(mIndex.mData, mIndex.mLength); bool hasItems = mIndex.mLength != 0;
mIndex.reset(); // write out the offset of the Index to the end of the output stream
WriteElement(mOutputStream, indexOffset);
ClearResources(); return hasItems;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.