author | Matt Woodrow <mwoodrow@mozilla.com> |
Fri, 18 Nov 2011 17:00:38 +1300 | |
changeset 80430 | fce30603aea9b6618e333f8e28760318414b4a87 |
parent 80429 | c625d6aedcc29a2254a49a1f6ec5d83cbda19569 |
child 80431 | e789d1408f877c736d4a8a8bc0ec5024be5cfa78 |
push id | 21491 |
push user | bmo@edmorley.co.uk |
push date | Fri, 18 Nov 2011 08:46:29 +0000 |
treeherder | mozilla-central@447556784745 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jrmuizel |
bugs | 702517 |
milestone | 11.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/thebes/gfxAndroidPlatform.cpp +++ b/gfx/thebes/gfxAndroidPlatform.cpp @@ -74,22 +74,16 @@ gfxAndroidPlatform::CreateOffscreenSurfa if (contentType == gfxImageSurface::CONTENT_COLOR) newSurface = new gfxImageSurface (size, GetOffscreenFormat()); else newSurface = new gfxImageSurface (size, gfxASurface::FormatFromContent(contentType)); return newSurface.forget(); } -RefPtr<DrawTarget> -gfxAndroidPlatform::CreateOffscreenDrawTarget(const IntSize& aSize, SurfaceFormat aFormat) -{ - return Factory::CreateDrawTarget(BACKEND_SKIA, aSize, aFormat); -} - nsresult gfxAndroidPlatform::GetFontList(nsIAtom *aLangGroup, const nsACString& aGenericFamily, nsTArray<nsString>& aListOfFonts) { gfxPlatformFontList::PlatformFontList()->GetFontList(aLangGroup, aGenericFamily, aListOfFonts);
--- a/gfx/thebes/gfxAndroidPlatform.h +++ b/gfx/thebes/gfxAndroidPlatform.h @@ -61,18 +61,17 @@ public: static gfxAndroidPlatform *GetPlatform() { return (gfxAndroidPlatform*) gfxPlatform::GetPlatform(); } virtual already_AddRefed<gfxASurface> CreateOffscreenSurface(const gfxIntSize& size, gfxASurface::gfxContentType contentType); - virtual mozilla::RefPtr<mozilla::gfx::DrawTarget> - CreateOffscreenDrawTarget(const mozilla::gfx::IntSize& aSize, mozilla::gfx::SurfaceFormat aFormat); + virtual bool SupportsAzure(mozilla::gfx::BackendType& aBackend) { aBackend = mozilla::gfx::BACKEND_SKIA; return true; } virtual gfxImageFormat GetOffscreenFormat() { return gfxASurface::ImageFormatRGB16_565; } mozilla::RefPtr<mozilla::gfx::ScaledFont> GetScaledFontForFont(gfxFont *aFont); // to support IPC font list (sharing between chrome and content) void GetFontList(InfallibleTArray<FontListEntry>* retValue);
--- a/gfx/thebes/gfxPlatform.cpp +++ b/gfx/thebes/gfxPlatform.cpp @@ -541,17 +541,21 @@ gfxPlatform::GetThebesSurfaceForDrawTarg image->SetData(&kDrawSourceSurface, data.forget().drop(), DataSourceSurfaceDestroy); return image.forget(); } RefPtr<DrawTarget> gfxPlatform::CreateOffscreenDrawTarget(const IntSize& aSize, SurfaceFormat aFormat) { - return NULL; + BackendType backend; + if (!SupportsAzure(backend)) { + return NULL; + } + return Factory::CreateDrawTarget(backend, aSize, aFormat); } nsresult gfxPlatform::GetFontList(nsIAtom *aLangGroup, const nsACString& aGenericFamily, nsTArray<nsString>& aListOfFonts) { return NS_ERROR_NOT_IMPLEMENTED;
--- a/gfx/thebes/gfxPlatform.h +++ b/gfx/thebes/gfxPlatform.h @@ -183,16 +183,18 @@ public: GetScaledFontForFont(gfxFont *aFont); virtual already_AddRefed<gfxASurface> GetThebesSurfaceForDrawTarget(mozilla::gfx::DrawTarget *aTarget); virtual mozilla::RefPtr<mozilla::gfx::DrawTarget> CreateOffscreenDrawTarget(const mozilla::gfx::IntSize& aSize, mozilla::gfx::SurfaceFormat aFormat); + virtual bool SupportsAzure(mozilla::gfx::BackendType& aBackend) { return false; } + /* * Font bits */ virtual void SetupClusterBoundaries(gfxTextRun *aTextRun, const PRUnichar *aString); /** * Fill aListOfFonts with the results of querying the list of font names
--- a/gfx/thebes/gfxPlatformMac.cpp +++ b/gfx/thebes/gfxPlatformMac.cpp @@ -134,22 +134,16 @@ gfxPlatformMac::CreateOffscreenSurface(c gfxASurface *newSurface = nsnull; newSurface = new gfxQuartzSurface(size, gfxASurface::FormatFromContent(contentType)); NS_IF_ADDREF(newSurface); return newSurface; } -RefPtr<DrawTarget> -gfxPlatformMac::CreateOffscreenDrawTarget(const IntSize& aSize, SurfaceFormat aFormat) -{ - return Factory::CreateDrawTarget(BACKEND_SKIA, aSize, aFormat); -} - already_AddRefed<gfxASurface> gfxPlatformMac::OptimizeImage(gfxImageSurface *aSurface, gfxASurface::gfxImageFormat format) { const gfxIntSize& surfaceSize = aSurface->GetSize(); nsRefPtr<gfxImageSurface> isurf = aSurface; if (format != aSurface->Format()) { @@ -174,16 +168,23 @@ gfxPlatformMac::GetScaledFontForFont(gfx nativeFont.mType = NATIVE_FONT_MAC_FONT_FACE; nativeFont.mFont = font->GetCGFontRef(); RefPtr<ScaledFont> scaledFont = mozilla::gfx::Factory::CreateScaledFontForNativeFont(nativeFont, font->GetAdjustedSize()); return scaledFont; } +bool +gfxPlatformMac::SupportsAzure(BackendType& aBackend) +{ + aBackend = BACKEND_SKIA; + return true; +} + nsresult gfxPlatformMac::ResolveFontName(const nsAString& aFontName, FontResolverCallback aCallback, void *aClosure, bool& aAborted) { nsAutoString resolvedName; if (!gfxPlatformFontList::PlatformFontList()-> ResolveFontName(aFontName, resolvedName)) {
--- a/gfx/thebes/gfxPlatformMac.h +++ b/gfx/thebes/gfxPlatformMac.h @@ -58,25 +58,24 @@ public: static gfxPlatformMac *GetPlatform() { return (gfxPlatformMac*) gfxPlatform::GetPlatform(); } already_AddRefed<gfxASurface> CreateOffscreenSurface(const gfxIntSize& size, gfxASurface::gfxContentType contentType); - virtual mozilla::RefPtr<mozilla::gfx::DrawTarget> - CreateOffscreenDrawTarget(const mozilla::gfx::IntSize& aSize, mozilla::gfx::SurfaceFormat aFormat); - already_AddRefed<gfxASurface> OptimizeImage(gfxImageSurface *aSurface, gfxASurface::gfxImageFormat format); mozilla::RefPtr<mozilla::gfx::ScaledFont> GetScaledFontForFont(gfxFont *aFont); + virtual bool SupportsAzure(mozilla::gfx::BackendType& aBackend); + nsresult ResolveFontName(const nsAString& aFontName, FontResolverCallback aCallback, void *aClosure, bool& aAborted); nsresult GetStandardFamilyName(const nsAString& aFontName, nsAString& aFamilyName); gfxFontGroup *CreateFontGroup(const nsAString &aFamilies, const gfxFontStyle *aStyle,
--- a/gfx/thebes/gfxWindowsPlatform.cpp +++ b/gfx/thebes/gfxWindowsPlatform.cpp @@ -469,32 +469,16 @@ gfxWindowsPlatform::CreateOffscreenSurfa if (surf == nsnull) surf = new gfxImageSurface(size, gfxASurface::FormatFromContent(contentType)); NS_IF_ADDREF(surf); return surf; } -RefPtr<DrawTarget> -gfxWindowsPlatform::CreateOffscreenDrawTarget(const IntSize& aSize, SurfaceFormat aFormat) -{ -#ifdef CAIRO_HAS_D2D_SURFACE - if (mRenderMode == RENDER_DIRECT2D) { - return Factory::CreateDrawTarget(BACKEND_DIRECT2D, aSize, aFormat); - } -#endif - - if (Preferences::GetBool("gfx.canvas.azure.prefer-skia", false)) { - return Factory::CreateDrawTarget(BACKEND_SKIA, aSize, aFormat); - } - - return NULL; -} - RefPtr<ScaledFont> gfxWindowsPlatform::GetScaledFontForFont(gfxFont *aFont) { if(mUseDirectWrite) { gfxDWriteFont *font = static_cast<gfxDWriteFont*>(aFont); NativeFont nativeFont; nativeFont.mType = NATIVE_FONT_DWRITE_FONT_FACE; @@ -535,16 +519,33 @@ gfxWindowsPlatform::GetThebesSurfaceForD return surf.forget(); } #endif return gfxPlatform::GetThebesSurfaceForDrawTarget(aTarget); } +bool +gfxWindowsPlatform::SupportsAzure(BackendType& aBackend) +{ +#ifdef CAIRO_HAS_D2D_SURFACE + if (mRenderMode == RENDER_DIRECT2D) { + aBackend = BACKEND_DIRECT2D; + return true; + } +#endif + + if (Preferences::GetBool("gfx.canvas.azure.prefer-skia", false)) { + aBackend = BACKEND_SKIA; + return true; + } + return false; +} + nsresult gfxWindowsPlatform::GetFontList(nsIAtom *aLangGroup, const nsACString& aGenericFamily, nsTArray<nsString>& aListOfFonts) { gfxPlatformFontList::PlatformFontList()->GetFontList(aLangGroup, aGenericFamily, aListOfFonts); return NS_OK;
--- a/gfx/thebes/gfxWindowsPlatform.h +++ b/gfx/thebes/gfxWindowsPlatform.h @@ -126,18 +126,18 @@ public: virtual gfxPlatformFontList* CreatePlatformFontList(); already_AddRefed<gfxASurface> CreateOffscreenSurface(const gfxIntSize& size, gfxASurface::gfxContentType contentType); virtual mozilla::RefPtr<mozilla::gfx::ScaledFont> GetScaledFontForFont(gfxFont *aFont); virtual already_AddRefed<gfxASurface> GetThebesSurfaceForDrawTarget(mozilla::gfx::DrawTarget *aTarget); - virtual mozilla::RefPtr<mozilla::gfx::DrawTarget> - CreateOffscreenDrawTarget(const mozilla::gfx::IntSize& aSize, mozilla::gfx::SurfaceFormat aFormat); + + virtual bool SupportsAzure(mozilla::gfx::BackendType& aBackend); enum RenderMode { /* Use GDI and windows surfaces */ RENDER_GDI = 0, /* Use 32bpp image surfaces and call StretchDIBits */ RENDER_IMAGE_STRETCH32,