Backed out 8 changesets (bug 1057212, bug 1059033) for Windows build bustage

CLOSED TREE

Backed out changeset a54dbdca597b (bug 1059033)
Backed out changeset d8d79e4fbfc4 (bug 1059033)
Backed out changeset 87494588e493 (bug 1057212)
Backed out changeset 3e4105ea0a73 (bug 1059033)
Backed out changeset e59430ea4256 (bug 1059033)
Backed out changeset 301fdfea8fbf (bug 1059033)
Backed out changeset 1ef5a3a9bb06 (bug 1059033)
Backed out changeset a7eaac164c36 (bug 1059033)
This commit is contained in:
Phil Ringnalda 2014-08-31 23:55:31 -07:00
Родитель 0b556d816a
Коммит 7769dc074d
6 изменённых файлов: 78 добавлений и 264 удалений

Просмотреть файл

@ -254,12 +254,7 @@ DrawTargetCG::OptimizeSourceSurface(SourceSurface *aSurface) const
aSurface->GetType() == SurfaceType::COREGRAPHICS_CGCONTEXT) {
return aSurface;
}
RefPtr<DataSourceSurface> data = aSurface->GetDataSurface();
return CreateSourceSurfaceFromData(data->GetData(),
data->GetSize(),
data->Stride(),
data->GetFormat());
return aSurface->GetDataSurface();
}
class UnboundnessFixer

Просмотреть файл

@ -3,9 +3,6 @@
* 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/. */
#define _USE_MATH_DEFINES
#include <cmath>
#include "DrawTargetTiled.h"
#include "Logging.h"
@ -48,20 +45,66 @@ DrawTargetTiled::Init(const TileSet& aTiles)
return true;
}
class SnapshotTiled : public SourceSurface
{
public:
SnapshotTiled(const vector<Tile>& aTiles, const IntRect& aRect)
: mRect(aRect)
{
for (size_t i = 0; i < aTiles.size(); i++) {
mSnapshots.push_back(aTiles[i].mDrawTarget->Snapshot());
mOrigins.push_back(aTiles[i].mTileOrigin);
}
}
virtual SurfaceType GetType() const { return SurfaceType::TILED; }
virtual IntSize GetSize() const { return IntSize(mRect.XMost(), mRect.YMost()); }
virtual SurfaceFormat GetFormat() const { return mSnapshots[0]->GetFormat(); }
virtual TemporaryRef<DataSourceSurface> GetDataSurface()
{
RefPtr<DataSourceSurface> surf = Factory::CreateDataSourceSurface(GetSize(), GetFormat());
if (MOZ2D_WARN_IF(!surf)) {
return nullptr;
}
DataSourceSurface::MappedSurface mappedSurf;
surf->Map(DataSourceSurface::MapType::WRITE, &mappedSurf);
{
RefPtr<DrawTarget> dt =
Factory::CreateDrawTargetForData(BackendType::CAIRO, mappedSurf.mData,
GetSize(), mappedSurf.mStride, GetFormat());
for (size_t i = 0; i < mSnapshots.size(); i++) {
RefPtr<DataSourceSurface> dataSurf = mSnapshots[i]->GetDataSurface();
dt->CopySurface(dataSurf, IntRect(IntPoint(0, 0), mSnapshots[i]->GetSize()), mOrigins[i]);
}
}
surf->Unmap();
return surf.forget();
}
private:
vector<RefPtr<SourceSurface>> mSnapshots;
vector<IntPoint> mOrigins;
IntRect mRect;
};
TemporaryRef<SourceSurface>
DrawTargetTiled::Snapshot()
{
return new SnapshotTiled(mTiles, mRect);
}
// Skip the mClippedOut check since this is only used for Flush() which
// should happen even if we're clipped.
#define TILED_COMMAND(command) \
void \
DrawTargetTiled::command() \
{ \
for (size_t i = 0; i < mTiles.size(); i++) { \
mTiles[i].mDrawTarget->command(); \
\
\
mTiles[i].mDrawTarget->command(); \
} \
}
#define TILED_COMMAND1(command, type1) \
@ -69,8 +112,9 @@ DrawTargetTiled::Snapshot()
DrawTargetTiled::command(type1 arg1) \
{ \
for (size_t i = 0; i < mTiles.size(); i++) { \
if (!mTiles[i].mClippedOut) \
mTiles[i].mDrawTarget->command(arg1); \
\
\
mTiles[i].mDrawTarget->command(arg1); \
} \
}
#define TILED_COMMAND3(command, type1, type2, type3) \
@ -78,8 +122,9 @@ DrawTargetTiled::Snapshot()
DrawTargetTiled::command(type1 arg1, type2 arg2, type3 arg3) \
{ \
for (size_t i = 0; i < mTiles.size(); i++) { \
if (!mTiles[i].mClippedOut) \
mTiles[i].mDrawTarget->command(arg1, arg2, arg3); \
\
\
mTiles[i].mDrawTarget->command(arg1, arg2, arg3); \
} \
}
#define TILED_COMMAND4(command, type1, type2, type3, type4) \
@ -87,8 +132,9 @@ DrawTargetTiled::Snapshot()
DrawTargetTiled::command(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
{ \
for (size_t i = 0; i < mTiles.size(); i++) { \
if (!mTiles[i].mClippedOut) \
mTiles[i].mDrawTarget->command(arg1, arg2, arg3, arg4); \
\
\
mTiles[i].mDrawTarget->command(arg1, arg2, arg3, arg4); \
} \
}
#define TILED_COMMAND5(command, type1, type2, type3, type4, type5) \
@ -96,82 +142,29 @@ DrawTargetTiled::Snapshot()
DrawTargetTiled::command(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
{ \
for (size_t i = 0; i < mTiles.size(); i++) { \
if (!mTiles[i].mClippedOut) \
mTiles[i].mDrawTarget->command(arg1, arg2, arg3, arg4, arg5); \
\
\
mTiles[i].mDrawTarget->command(arg1, arg2, arg3, arg4, arg5); \
} \
}
TILED_COMMAND(Flush)
TILED_COMMAND5(DrawSurface, SourceSurface*, const Rect&,
const Rect&, const DrawSurfaceOptions&,
const DrawOptions&)
TILED_COMMAND4(DrawFilter, FilterNode*, const Rect&, const Point&, const DrawOptions&)
TILED_COMMAND1(ClearRect, const Rect&)
TILED_COMMAND4(MaskSurface, const Pattern&, SourceSurface*, Point, const DrawOptions&)
TILED_COMMAND3(FillRect, const Rect&, const Pattern&, const DrawOptions&)
TILED_COMMAND4(StrokeRect, const Rect&, const Pattern&, const StrokeOptions&, const DrawOptions&)
TILED_COMMAND5(StrokeLine, const Point&, const Point&, const Pattern&, const StrokeOptions&, const DrawOptions&)
TILED_COMMAND4(Stroke, const Path*, const Pattern&, const StrokeOptions&, const DrawOptions&)
TILED_COMMAND3(Fill, const Path*, const Pattern&, const DrawOptions&)
TILED_COMMAND5(FillGlyphs, ScaledFont*, const GlyphBuffer&, const Pattern&, const DrawOptions&, const GlyphRenderingOptions*)
TILED_COMMAND3(Mask, const Pattern&, const Pattern&, const DrawOptions&)
void
DrawTargetTiled::PushClip(const Path* aPath)
{
mClippedOutTilesStack.push_back(std::vector<uint32_t>());
std::vector<uint32_t>& clippedTiles = mClippedOutTilesStack.back();
Rect deviceRect = aPath->GetBounds(mTransform);
for (size_t i = 0; i < mTiles.size(); i++) {
if (!mTiles[i].mClippedOut) {
if (deviceRect.Intersects(Rect(mTiles[i].mTileOrigin.x,
mTiles[i].mTileOrigin.y,
mTiles[i].mDrawTarget->GetSize().width,
mTiles[i].mDrawTarget->GetSize().height))) {
mTiles[i].mDrawTarget->PushClip(aPath);
} else {
mTiles[i].mClippedOut = true;
clippedTiles.push_back(i);
}
}
}
}
void
DrawTargetTiled::PushClipRect(const Rect& aRect)
{
mClippedOutTilesStack.push_back(std::vector<uint32_t>());
std::vector<uint32_t>& clippedTiles = mClippedOutTilesStack.back();
Rect deviceRect = mTransform.TransformBounds(aRect);
for (size_t i = 0; i < mTiles.size(); i++) {
if (!mTiles[i].mClippedOut) {
if (deviceRect.Intersects(Rect(mTiles[i].mTileOrigin.x,
mTiles[i].mTileOrigin.y,
mTiles[i].mDrawTarget->GetSize().width,
mTiles[i].mDrawTarget->GetSize().height))) {
mTiles[i].mDrawTarget->PushClipRect(aRect);
} else {
mTiles[i].mClippedOut = true;
clippedTiles.push_back(i);
}
}
}
}
void
DrawTargetTiled::PopClip()
{
for (size_t i = 0; i < mTiles.size(); i++) {
if (!mTiles[i].mClippedOut) {
mTiles[i].mDrawTarget->PopClip();
}
}
std::vector<uint32_t>& clippedTiles = mClippedOutTilesStack.back();
for (size_t i = 0; i < clippedTiles.size(); i++) {
mTiles[clippedTiles[i]].mClippedOut = false;
}
mClippedOutTilesStack.pop_back();
}
TILED_COMMAND1(PushClip, const Path*)
TILED_COMMAND1(PushClipRect, const Rect&)
TILED_COMMAND(PopClip)
void
DrawTargetTiled::CopySurface(SourceSurface *aSurface,
@ -205,95 +198,5 @@ DrawTargetTiled::SetTransform(const Matrix& aTransform)
DrawTarget::SetTransform(aTransform);
}
void
DrawTargetTiled::DrawSurface(SourceSurface* aSurface, const Rect& aDest, const Rect& aSource, const DrawSurfaceOptions& aSurfaceOptions, const DrawOptions& aDrawOptions)
{
Rect deviceRect = mTransform.TransformBounds(aDest);
for (size_t i = 0; i < mTiles.size(); i++) {
if (!mTiles[i].mClippedOut &&
deviceRect.Intersects(Rect(mTiles[i].mTileOrigin.x,
mTiles[i].mTileOrigin.y,
mTiles[i].mDrawTarget->GetSize().width,
mTiles[i].mDrawTarget->GetSize().height))) {
mTiles[i].mDrawTarget->DrawSurface(aSurface, aDest, aSource, aSurfaceOptions, aDrawOptions);
}
}
}
void
DrawTargetTiled::FillRect(const Rect& aRect, const Pattern& aPattern, const DrawOptions& aDrawOptions)
{
Rect deviceRect = mTransform.TransformBounds(aRect);
for (size_t i = 0; i < mTiles.size(); i++) {
if (!mTiles[i].mClippedOut &&
deviceRect.Intersects(Rect(mTiles[i].mTileOrigin.x,
mTiles[i].mTileOrigin.y,
mTiles[i].mDrawTarget->GetSize().width,
mTiles[i].mDrawTarget->GetSize().height))) {
mTiles[i].mDrawTarget->FillRect(aRect, aPattern, aDrawOptions);
}
}
}
// The logic for this comes from _cairo_stroke_style_max_distance_from_path
static Rect
PathExtentsToMaxStrokeExtents(const StrokeOptions &aStrokeOptions,
const Rect &aRect,
const Matrix &aTransform)
{
float styleExpansionFactor = 0.5f;
if (aStrokeOptions.mLineCap == CapStyle::SQUARE) {
styleExpansionFactor = M_SQRT1_2;
}
if (aStrokeOptions.mLineJoin == JoinStyle::MITER &&
styleExpansionFactor < M_SQRT2 * aStrokeOptions.mMiterLimit) {
styleExpansionFactor = M_SQRT2 * aStrokeOptions.mMiterLimit;
}
styleExpansionFactor *= aStrokeOptions.mLineWidth;
double dx = styleExpansionFactor * hypot(aTransform._11, aTransform._21);
double dy = styleExpansionFactor * hypot(aTransform._22, aTransform._12);
Rect result = aRect;
result.Inflate(dx, dy);
return result;
}
void
DrawTargetTiled::Stroke(const Path* aPath, const Pattern& aPattern, const StrokeOptions& aStrokeOptions, const DrawOptions& aDrawOptions)
{
// Approximate the stroke extents, since Path::GetStrokeExtents can be slow
Rect deviceRect = PathExtentsToMaxStrokeExtents(aStrokeOptions,
aPath->GetBounds(mTransform),
mTransform);
for (size_t i = 0; i < mTiles.size(); i++) {
if (!mTiles[i].mClippedOut &&
deviceRect.Intersects(Rect(mTiles[i].mTileOrigin.x,
mTiles[i].mTileOrigin.y,
mTiles[i].mDrawTarget->GetSize().width,
mTiles[i].mDrawTarget->GetSize().height))) {
mTiles[i].mDrawTarget->Stroke(aPath, aPattern, aStrokeOptions, aDrawOptions);
}
}
}
void
DrawTargetTiled::Fill(const Path* aPath, const Pattern& aPattern, const DrawOptions& aDrawOptions)
{
Rect deviceRect = aPath->GetBounds(mTransform);
for (size_t i = 0; i < mTiles.size(); i++) {
if (!mTiles[i].mClippedOut &&
deviceRect.Intersects(Rect(mTiles[i].mTileOrigin.x,
mTiles[i].mTileOrigin.y,
mTiles[i].mDrawTarget->GetSize().width,
mTiles[i].mDrawTarget->GetSize().height))) {
mTiles[i].mDrawTarget->Fill(aPath, aPattern, aDrawOptions);
}
}
}
}
}

Просмотреть файл

@ -14,20 +14,6 @@
namespace mozilla {
namespace gfx {
struct TileInternal : public Tile {
TileInternal()
: mClippedOut(false)
{}
TileInternal(const Tile& aOther)
: Tile(aOther)
, mClippedOut(false)
{}
bool mClippedOut;
};
class DrawTargetTiled : public DrawTarget
{
public:
@ -144,51 +130,7 @@ public:
}
private:
std::vector<TileInternal> mTiles;
std::vector<std::vector<uint32_t> > mClippedOutTilesStack;
IntRect mRect;
};
class SnapshotTiled : public SourceSurface
{
public:
SnapshotTiled(const std::vector<TileInternal>& aTiles, const IntRect& aRect)
: mRect(aRect)
{
for (size_t i = 0; i < aTiles.size(); i++) {
mSnapshots.push_back(aTiles[i].mDrawTarget->Snapshot());
mOrigins.push_back(aTiles[i].mTileOrigin);
}
}
virtual SurfaceType GetType() const { return SurfaceType::TILED; }
virtual IntSize GetSize() const { return IntSize(mRect.XMost(), mRect.YMost()); }
virtual SurfaceFormat GetFormat() const { return mSnapshots[0]->GetFormat(); }
virtual TemporaryRef<DataSourceSurface> GetDataSurface()
{
RefPtr<DataSourceSurface> surf = Factory::CreateDataSourceSurface(GetSize(), GetFormat());
DataSourceSurface::MappedSurface mappedSurf;
surf->Map(DataSourceSurface::MapType::WRITE, &mappedSurf);
{
RefPtr<DrawTarget> dt =
Factory::CreateDrawTargetForData(BackendType::CAIRO, mappedSurf.mData,
GetSize(), mappedSurf.mStride, GetFormat());
for (size_t i = 0; i < mSnapshots.size(); i++) {
RefPtr<DataSourceSurface> dataSurf = mSnapshots[i]->GetDataSurface();
dt->CopySurface(dataSurf, IntRect(IntPoint(0, 0), mSnapshots[i]->GetSize()), mOrigins[i]);
}
}
surf->Unmap();
return surf.forget();
}
std::vector<RefPtr<SourceSurface>> mSnapshots;
std::vector<IntPoint> mOrigins;
std::vector<Tile> mTiles;
IntRect mRect;
};

Просмотреть файл

@ -21,7 +21,6 @@ EXPORTS.mozilla.gfx += [
'BorrowedContext.h',
'Coord.h',
'DataSurfaceHelpers.h',
'DrawTargetTiled.h',
'Filters.h',
'Helpers.h',
'Logging.h',
@ -108,6 +107,7 @@ UNIFIED_SOURCES += [
'DrawTargetCapture.cpp',
'DrawTargetDual.cpp',
'DrawTargetRecording.cpp',
'DrawTargetTiled.cpp',
'Factory.cpp',
'FilterNodeSoftware.cpp',
'FilterProcessing.cpp',
@ -126,11 +126,6 @@ UNIFIED_SOURCES += [
'SourceSurfaceRawData.cpp',
]
SOURCES += [
'DrawTargetTiled.cpp',
]
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
SOURCES += [
'MacIOSurface.cpp',

Просмотреть файл

@ -689,7 +689,6 @@ BufferTextureClient::BorrowDrawTarget()
MOZ_ASSERT(mLocked, "BorrowDrawTarget should be called on locked textures only");
if (mDrawTarget) {
mDrawTarget->SetTransform(Matrix());
return mDrawTarget;
}
@ -739,6 +738,7 @@ BufferTextureClient::Unlock()
}
mDrawTarget->Flush();
mDrawTarget = nullptr;
}
bool

Просмотреть файл

@ -24,7 +24,6 @@
#include "GeckoProfiler.h"
#include "gfx2DGlue.h"
#include "mozilla/gfx/PathHelpers.h"
#include "mozilla/gfx/DrawTargetTiled.h"
#include <algorithm>
#if CAIRO_HAS_DWRITE_FONT
@ -1119,32 +1118,12 @@ gfxContext::PushGroupAndCopyBackground(gfxContentType content)
Point offset = CurrentState().deviceOffset - oldDeviceOffset;
Rect surfRect(0, 0, Float(mDT->GetSize().width), Float(mDT->GetSize().height));
Rect sourceRect = surfRect + offset;
Rect sourceRect = surfRect;
sourceRect.x += offset.x;
sourceRect.y += offset.y;
mDT->SetTransform(Matrix());
// XXX: It's really sad that we have to do this (for performance).
// Once DrawTarget gets a PushLayer API we can implement this within
// DrawTargetTiled.
if (source->GetType() == SurfaceType::TILED) {
SnapshotTiled *sourceTiled = static_cast<SnapshotTiled*>(source.get());
for (uint32_t i = 0; i < sourceTiled->mSnapshots.size(); i++) {
Rect tileSourceRect = sourceRect.Intersect(Rect(sourceTiled->mOrigins[i].x,
sourceTiled->mOrigins[i].y,
sourceTiled->mSnapshots[i]->GetSize().width,
sourceTiled->mSnapshots[i]->GetSize().height));
if (tileSourceRect.IsEmpty()) {
continue;
}
Rect tileDestRect = tileSourceRect - offset;
tileSourceRect -= sourceTiled->mOrigins[i];
mDT->DrawSurface(sourceTiled->mSnapshots[i], tileDestRect, tileSourceRect);
}
} else {
mDT->DrawSurface(source, surfRect, sourceRect);
}
mDT->DrawSurface(source, surfRect, sourceRect);
mDT->SetOpaqueRect(oldDT->GetOpaqueRect());
PushClipsToDT(mDT);