From fd74ccfd81685bed8a00688541b8ea22c5f4f1ab Mon Sep 17 00:00:00 2001 From: Landry Breuil Date: Sun, 26 Oct 2014 17:13:19 +0100 Subject: [PATCH 01/52] Bug 971897: Use xpct{stubs,invoke}_x86_64 from linux/unix on OpenBSD/amd64 for consistency r=bsmedberg This fixes the download panel issue, and brings us revs 727721e5d8ac, 844b142d8111 and 236989b3a807 as a bonus. Remove the unmaintained OpenBSD/amd64 specific versions. --- xpcom/reflect/xptcall/md/unix/moz.build | 10 +- .../md/unix/xptcinvoke_amd64_openbsd.cpp | 178 ---------------- .../md/unix/xptcstubs_amd64_openbsd.cpp | 201 ------------------ 3 files changed, 2 insertions(+), 387 deletions(-) delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcinvoke_amd64_openbsd.cpp delete mode 100644 xpcom/reflect/xptcall/md/unix/xptcstubs_amd64_openbsd.cpp diff --git a/xpcom/reflect/xptcall/md/unix/moz.build b/xpcom/reflect/xptcall/md/unix/moz.build index 64c8f04bee2..bea56f559d4 100644 --- a/xpcom/reflect/xptcall/md/unix/moz.build +++ b/xpcom/reflect/xptcall/md/unix/moz.build @@ -19,14 +19,14 @@ if CONFIG['OS_ARCH'] == 'Darwin': if '86' in CONFIG['OS_TEST'] and CONFIG['OS_TEST'] != 'x86_64': DEFINES['MOZ_NEED_LEADING_UNDERSCORE'] = True -if CONFIG['OS_ARCH'] in ('NetBSD', 'OpenBSD', 'GNU'): +if CONFIG['OS_ARCH'] in ('NetBSD', 'GNU'): if CONFIG['CPU_ARCH'] == 'x86': SOURCES += [ 'xptcinvoke_gcc_x86_unix.cpp', 'xptcstubs_gcc_x86_unix.cpp' ] -if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD') or \ +if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD', 'OpenBSD') or \ CONFIG['OS_ARCH'].startswith('GNU_'): if CONFIG['OS_TEST'] == 'x86_64': SOURCES += [ @@ -48,12 +48,6 @@ if CONFIG['OS_ARCH'] in ('Linux', 'FreeBSD'): 'xptcstubs_ipf64.cpp' ] -if CONFIG['OS_ARCH'] == 'OpenBSD' and CONFIG['OS_TEST'] == 'x86_64': - SOURCES += [ - 'xptcinvoke_amd64_openbsd.cpp', - 'xptcstubs_amd64_openbsd.cpp' - ] - if CONFIG['OS_ARCH'] == 'SunOS': if CONFIG['OS_TEST'] == 'x86_64': if CONFIG['GNU_CC']: diff --git a/xpcom/reflect/xptcall/md/unix/xptcinvoke_amd64_openbsd.cpp b/xpcom/reflect/xptcall/md/unix/xptcinvoke_amd64_openbsd.cpp deleted file mode 100644 index 66098708a58..00000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_amd64_openbsd.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * 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/. */ - -// Platform specific code to invoke XPCOM methods on native objects - -#include "xptcprivate.h" - -// 6 integral parameters are passed in registers -const uint32_t GPR_COUNT = 6; - -// 8 floating point parameters are passed in SSE registers -const uint32_t FPR_COUNT = 8; - -// Remember that these 'words' are 64-bit long -static inline void -invoke_count_words(uint32_t paramCount, nsXPTCVariant * s, - uint32_t & nr_gpr, uint32_t & nr_fpr, uint32_t & nr_stack) -{ - nr_gpr = 1; // skip one GP register for 'that' - nr_fpr = 0; - nr_stack = 0; - - /* Compute number of eightbytes of class MEMORY. */ - for (uint32_t i = 0; i < paramCount; i++, s++) { - if (!s->IsPtrData() - && (s->type == nsXPTType::T_FLOAT || s->type == nsXPTType::T_DOUBLE)) { - if (nr_fpr < FPR_COUNT) - nr_fpr++; - else - nr_stack++; - } - else { - if (nr_gpr < GPR_COUNT) - nr_gpr++; - else - nr_stack++; - } - } -} - -static void -invoke_copy_to_stack(uint64_t * d, uint32_t paramCount, nsXPTCVariant * s, - uint64_t * gpregs, double * fpregs) -{ - uint32_t nr_gpr = 1; // skip one GP register for 'that' - uint32_t nr_fpr = 0; - uint64_t value; - - for (uint32_t i = 0; i < paramCount; i++, s++) { - if (s->IsPtrData()) - value = (uint64_t) s->ptr; - else { - switch (s->type) { - case nsXPTType::T_FLOAT: break; - case nsXPTType::T_DOUBLE: break; - case nsXPTType::T_I8: value = s->val.i8; break; - case nsXPTType::T_I16: value = s->val.i16; break; - case nsXPTType::T_I32: value = s->val.i32; break; - case nsXPTType::T_I64: value = s->val.i64; break; - case nsXPTType::T_U8: value = s->val.u8; break; - case nsXPTType::T_U16: value = s->val.u16; break; - case nsXPTType::T_U32: value = s->val.u32; break; - case nsXPTType::T_U64: value = s->val.u64; break; - case nsXPTType::T_BOOL: value = s->val.b; break; - case nsXPTType::T_CHAR: value = s->val.c; break; - case nsXPTType::T_WCHAR: value = s->val.wc; break; - default: value = (uint64_t) s->val.p; break; - } - } - - if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) { - if (nr_fpr < FPR_COUNT) - fpregs[nr_fpr++] = s->val.d; - else { - *((double *)d) = s->val.d; - d++; - } - } - else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) { - if (nr_fpr < FPR_COUNT) - // The value in %xmm register is already prepared to - // be retrieved as a float. Therefore, we pass the - // value verbatim, as a double without conversion. - fpregs[nr_fpr++] = s->val.d; - else { - *((float *)d) = s->val.f; - d++; - } - } - else { - if (nr_gpr < GPR_COUNT) - gpregs[nr_gpr++] = value; - else - *d++ = value; - } - } -} - -EXPORT_XPCOM_API(nsresult) -NS_InvokeByIndex(nsISupports * that, uint32_t methodIndex, - uint32_t paramCount, nsXPTCVariant * params) -{ - uint32_t nr_gpr, nr_fpr, nr_stack; - invoke_count_words(paramCount, params, nr_gpr, nr_fpr, nr_stack); - - // Stack, if used, must be 16-bytes aligned - if (nr_stack) - nr_stack = (nr_stack + 1) & ~1; - - // Load parameters to stack, if necessary - uint64_t *stack = (uint64_t *) __builtin_alloca(nr_stack * 8); - uint64_t gpregs[GPR_COUNT]; - double fpregs[FPR_COUNT]; - invoke_copy_to_stack(stack, paramCount, params, gpregs, fpregs); - - // Load FPR registers from fpregs[] - register double d0 asm("xmm0"); - register double d1 asm("xmm1"); - register double d2 asm("xmm2"); - register double d3 asm("xmm3"); - register double d4 asm("xmm4"); - register double d5 asm("xmm5"); - register double d6 asm("xmm6"); - register double d7 asm("xmm7"); - - switch (nr_fpr) { -#define ARG_FPR(N) \ - case N+1: d##N = fpregs[N]; - ARG_FPR(7); - ARG_FPR(6); - ARG_FPR(5); - ARG_FPR(4); - ARG_FPR(3); - ARG_FPR(2); - ARG_FPR(1); - ARG_FPR(0); - case 0:; -#undef ARG_FPR - } - - // Load GPR registers from gpregs[] - register uint64_t a0 asm("rdi"); - register uint64_t a1 asm("rsi"); - register uint64_t a2 asm("rdx"); - register uint64_t a3 asm("rcx"); - register uint64_t a4 asm("r8"); - register uint64_t a5 asm("r9"); - - switch (nr_gpr) { -#define ARG_GPR(N) \ - case N+1: a##N = gpregs[N]; - ARG_GPR(5); - ARG_GPR(4); - ARG_GPR(3); - ARG_GPR(2); - ARG_GPR(1); - case 1: a0 = (uint64_t) that; - case 0:; -#undef ARG_GPR - } - - // Ensure that assignments to SSE registers won't be optimized away - asm("" :: - "x" (d0), "x" (d1), "x" (d2), "x" (d3), - "x" (d4), "x" (d5), "x" (d6), "x" (d7)); - - // Get pointer to method - uint64_t methodAddress = *((uint64_t *)that); - methodAddress += 8 * methodIndex; - methodAddress = *((uint64_t *)methodAddress); - - typedef nsresult (*Method)(uint64_t, uint64_t, uint64_t, uint64_t, uint64_t, uint64_t); - nsresult result = ((Method)methodAddress)(a0, a1, a2, a3, a4, a5); - return result; -} diff --git a/xpcom/reflect/xptcall/md/unix/xptcstubs_amd64_openbsd.cpp b/xpcom/reflect/xptcall/md/unix/xptcstubs_amd64_openbsd.cpp deleted file mode 100644 index 556645f0cb3..00000000000 --- a/xpcom/reflect/xptcall/md/unix/xptcstubs_amd64_openbsd.cpp +++ /dev/null @@ -1,201 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * 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/. */ - -// Implement shared vtbl methods. - -#include "xptcprivate.h" -#include "xptiprivate.h" - -// The Linux/x86-64 ABI passes the first 6 integer parameters and the -// first 8 floating point parameters in registers (rdi, rsi, rdx, rcx, -// r8, r9 and xmm0-xmm7), no stack space is allocated for these by the -// caller. The rest of the parameters are passed in the callers stack -// area. - -const uint32_t PARAM_BUFFER_COUNT = 16; -const uint32_t GPR_COUNT = 6; -const uint32_t FPR_COUNT = 8; - -// PrepareAndDispatch() is called by SharedStub() and calls the actual method. -// -// - 'args[]' contains the arguments passed on stack -// - 'gpregs[]' contains the arguments passed in integer registers -// - 'fpregs[]' contains the arguments passed in floating point registers -// -// The parameters are mapped into an array of type 'nsXPTCMiniVariant' -// and then the method gets called. - -extern "C" nsresult ATTRIBUTE_USED -PrepareAndDispatch(nsXPTCStubBase * self, uint32_t methodIndex, - uint64_t * args, uint64_t * gpregs, double *fpregs) -{ - nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT]; - nsXPTCMiniVariant* dispatchParams = nullptr; - const nsXPTMethodInfo* info; - uint32_t paramCount; - uint32_t i; - nsresult result = NS_ERROR_FAILURE; - - NS_ASSERTION(self,"no self"); - - self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info); - NS_ASSERTION(info,"no method info"); - if (!info) - return NS_ERROR_UNEXPECTED; - - paramCount = info->GetParamCount(); - - // setup variant array pointer - if (paramCount > PARAM_BUFFER_COUNT) - dispatchParams = new nsXPTCMiniVariant[paramCount]; - else - dispatchParams = paramBuffer; - - NS_ASSERTION(dispatchParams,"no place for params"); - if (!dispatchParams) - return NS_ERROR_OUT_OF_MEMORY; - - uint64_t* ap = args; - uint32_t nr_gpr = 1; // skip one GPR register for 'that' - uint32_t nr_fpr = 0; - uint64_t value; - - for (i = 0; i < paramCount; i++) { - const nsXPTParamInfo& param = info->GetParam(i); - const nsXPTType& type = param.GetType(); - nsXPTCMiniVariant* dp = &dispatchParams[i]; - - if (!param.IsOut() && type == nsXPTType::T_DOUBLE) { - if (nr_fpr < FPR_COUNT) - dp->val.d = fpregs[nr_fpr++]; - else - dp->val.d = *(double*) ap++; - continue; - } - else if (!param.IsOut() && type == nsXPTType::T_FLOAT) { - if (nr_fpr < FPR_COUNT) - // The value in %xmm register is already prepared to - // be retrieved as a float. Therefore, we pass the - // value verbatim, as a double without conversion. - dp->val.d = *(double*) ap++; - else - dp->val.f = *(float*) ap++; - continue; - } - else { - if (nr_gpr < GPR_COUNT) - value = gpregs[nr_gpr++]; - else - value = *ap++; - } - - if (param.IsOut() || !type.IsArithmetic()) { - dp->val.p = (void*) value; - continue; - } - - switch (type) { - case nsXPTType::T_I8: dp->val.i8 = (int8_t) value; break; - case nsXPTType::T_I16: dp->val.i16 = (int16_t) value; break; - case nsXPTType::T_I32: dp->val.i32 = (int32_t) value; break; - case nsXPTType::T_I64: dp->val.i64 = (int64_t) value; break; - case nsXPTType::T_U8: dp->val.u8 = (uint8_t) value; break; - case nsXPTType::T_U16: dp->val.u16 = (uint16_t) value; break; - case nsXPTType::T_U32: dp->val.u32 = (uint32_t) value; break; - case nsXPTType::T_U64: dp->val.u64 = (uint64_t) value; break; - case nsXPTType::T_BOOL: dp->val.b = (bool) value; break; - case nsXPTType::T_CHAR: dp->val.c = (char) value; break; - case nsXPTType::T_WCHAR: dp->val.wc = (wchar_t) value; break; - - default: - NS_ERROR("bad type"); - break; - } - } - - result = self->mOuter->CallMethod((uint16_t) methodIndex, info, dispatchParams); - - if (dispatchParams != paramBuffer) - delete [] dispatchParams; - - return result; -} - -// Linux/x86-64 uses gcc >= 3.1 -#define STUB_ENTRY(n) \ -asm(".section \".text\"\n\t" \ - ".align 2\n\t" \ - ".if " #n " < 10\n\t" \ - ".globl _ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \ - ".hidden _ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \ - ".type _ZN14nsXPTCStubBase5Stub" #n "Ev,@function\n" \ - "_ZN14nsXPTCStubBase5Stub" #n "Ev:\n\t" \ - ".elseif " #n " < 100\n\t" \ - ".globl _ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \ - ".hidden _ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \ - ".type _ZN14nsXPTCStubBase6Stub" #n "Ev,@function\n" \ - "_ZN14nsXPTCStubBase6Stub" #n "Ev:\n\t" \ - ".elseif " #n " < 1000\n\t" \ - ".globl _ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \ - ".hidden _ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \ - ".type _ZN14nsXPTCStubBase7Stub" #n "Ev,@function\n" \ - "_ZN14nsXPTCStubBase7Stub" #n "Ev:\n\t" \ - ".else\n\t" \ - ".err \"stub number " #n " >= 1000 not yet supported\"\n\t" \ - ".endif\n\t" \ - "movl $" #n ", %eax\n\t" \ - "jmp SharedStub\n\t" \ - ".if " #n " < 10\n\t" \ - ".size _ZN14nsXPTCStubBase5Stub" #n "Ev,.-_ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \ - ".elseif " #n " < 100\n\t" \ - ".size _ZN14nsXPTCStubBase6Stub" #n "Ev,.-_ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \ - ".else\n\t" \ - ".size _ZN14nsXPTCStubBase7Stub" #n "Ev,.-_ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \ - ".endif"); - -// static nsresult SharedStub(uint32_t methodIndex) -asm(".section \".text\"\n\t" - ".align 2\n\t" - ".type SharedStub,@function\n\t" - "SharedStub:\n\t" - // make room for gpregs (48), fpregs (64) - "pushq %rbp\n\t" - "movq %rsp,%rbp\n\t" - "subq $112,%rsp\n\t" - // save GP registers - "movq %rdi,-112(%rbp)\n\t" - "movq %rsi,-104(%rbp)\n\t" - "movq %rdx, -96(%rbp)\n\t" - "movq %rcx, -88(%rbp)\n\t" - "movq %r8 , -80(%rbp)\n\t" - "movq %r9 , -72(%rbp)\n\t" - "leaq -112(%rbp),%rcx\n\t" - // save FP registers - "movsd %xmm0,-64(%rbp)\n\t" - "movsd %xmm1,-56(%rbp)\n\t" - "movsd %xmm2,-48(%rbp)\n\t" - "movsd %xmm3,-40(%rbp)\n\t" - "movsd %xmm4,-32(%rbp)\n\t" - "movsd %xmm5,-24(%rbp)\n\t" - "movsd %xmm6,-16(%rbp)\n\t" - "movsd %xmm7, -8(%rbp)\n\t" - "leaq -64(%rbp),%r8\n\t" - // rdi has the 'self' pointer already - "movl %eax,%esi\n\t" - "leaq 16(%rbp),%rdx\n\t" - "call PrepareAndDispatch@plt\n\t" - "leave\n\t" - "ret\n\t" - ".size SharedStub,.-SharedStub"); - -#define SENTINEL_ENTRY(n) \ -nsresult nsXPTCStubBase::Sentinel##n() \ -{ \ - NS_ERROR("nsXPTCStubBase::Sentinel called"); \ - return NS_ERROR_NOT_IMPLEMENTED; \ -} - -#include "xptcstubsdef.inc" From 39d2df737bc99328a9418b7247416af6a5aa8843 Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Sun, 26 Oct 2014 17:57:49 +0000 Subject: [PATCH 02/52] Bug 1085321 - Remove gfxContext::Arc/NegativeArc. r=Bas --- gfx/thebes/gfxContext.cpp | 16 ---------------- gfx/thebes/gfxContext.h | 23 +---------------------- 2 files changed, 1 insertion(+), 38 deletions(-) diff --git a/gfx/thebes/gfxContext.cpp b/gfx/thebes/gfxContext.cpp index 83e8c5fdd95..80569d449c2 100644 --- a/gfx/thebes/gfxContext.cpp +++ b/gfx/thebes/gfxContext.cpp @@ -324,22 +324,6 @@ gfxContext::QuadraticCurveTo(const gfxPoint& pt1, const gfxPoint& pt2) mPathBuilder->QuadraticBezierTo(ToPoint(pt1), ToPoint(pt2)); } -void -gfxContext::Arc(const gfxPoint& center, gfxFloat radius, - gfxFloat angle1, gfxFloat angle2) -{ - EnsurePathBuilder(); - mPathBuilder->Arc(ToPoint(center), Float(radius), Float(angle1), Float(angle2)); -} - -void -gfxContext::NegativeArc(const gfxPoint& center, gfxFloat radius, - gfxFloat angle1, gfxFloat angle2) -{ - EnsurePathBuilder(); - mPathBuilder->Arc(ToPoint(center), Float(radius), Float(angle2), Float(angle1)); -} - void gfxContext::Line(const gfxPoint& start, const gfxPoint& end) { diff --git a/gfx/thebes/gfxContext.h b/gfx/thebes/gfxContext.h index 3c7dff97b26..3685c40d40a 100644 --- a/gfx/thebes/gfxContext.h +++ b/gfx/thebes/gfxContext.h @@ -135,7 +135,7 @@ public: mozilla::TemporaryRef GetPath(); /** - * Appends the given path to the current path. + * Sets the given path as the current path. */ void SetPath(Path* path); @@ -172,27 +172,6 @@ public: */ void QuadraticCurveTo(const gfxPoint& pt1, const gfxPoint& pt2); - /** - * Draws a clockwise arc (i.e. a circle segment). - * @param center The center of the circle - * @param radius The radius of the circle - * @param angle1 Starting angle for the segment - * @param angle2 Ending angle - */ - void Arc(const gfxPoint& center, gfxFloat radius, - gfxFloat angle1, gfxFloat angle2); - - /** - * Draws a counter-clockwise arc (i.e. a circle segment). - * @param center The center of the circle - * @param radius The radius of the circle - * @param angle1 Starting angle for the segment - * @param angle2 Ending angle - */ - - void NegativeArc(const gfxPoint& center, gfxFloat radius, - gfxFloat angle1, gfxFloat angle2); - // path helpers /** * Draws a line from start to end. From 5fcb13c0eb85ec95efff782711936d8f135cb976 Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Sun, 26 Oct 2014 17:57:49 +0000 Subject: [PATCH 03/52] Bug 1088781 - Rename nsLayoutUtils::GetStringWidth to nsLayoutUtils::AppUnitWidthOfStringBidi. r=dholbert --- layout/base/nsLayoutUtils.cpp | 49 ++++++++++++----------------- layout/base/nsLayoutUtils.h | 25 ++++++++++----- layout/generic/TextOverflow.cpp | 5 ++- layout/generic/nsBulletFrame.cpp | 4 +-- layout/generic/nsImageFrame.cpp | 3 +- layout/generic/nsPageFrame.cpp | 7 ++--- layout/xul/nsListBoxBodyFrame.cpp | 4 +-- layout/xul/nsTextBoxFrame.cpp | 19 ++++++----- layout/xul/tree/nsTreeBodyFrame.cpp | 16 +++++----- 9 files changed, 65 insertions(+), 67 deletions(-) diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index 021f588b45b..1935c19813a 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -4680,15 +4680,6 @@ static int32_t GetMaxChunkLength(nsFontMetrics& aFontMetrics) return std::min(aFontMetrics.GetMaxStringLength(), MAX_GFX_TEXT_BUF_SIZE); } -nscoord -nsLayoutUtils::AppUnitWidthOfString(const nsString& aString, - nsFontMetrics& aFontMetrics, - nsRenderingContext& aContext) -{ - return AppUnitWidthOfString(aString.get(), aString.Length(), - aFontMetrics, aContext); -} - nscoord nsLayoutUtils::AppUnitWidthOfString(const char16_t *aString, uint32_t aLength, @@ -4706,6 +4697,26 @@ nsLayoutUtils::AppUnitWidthOfString(const char16_t *aString, return width; } +nscoord +nsLayoutUtils::AppUnitWidthOfStringBidi(const char16_t* aString, + uint32_t aLength, + const nsIFrame* aFrame, + nsFontMetrics& aFontMetrics, + nsRenderingContext& aContext) +{ + nsPresContext* presContext = aFrame->PresContext(); + if (presContext->BidiEnabled()) { + nsBidiLevel level = + nsBidiPresUtils::BidiLevelFromStyle(aFrame->StyleContext()); + return nsBidiPresUtils::MeasureTextWidth(aString, aLength, level, + presContext, aContext, + aFontMetrics); + } + aFontMetrics.SetTextRunRTL(false); + return nsLayoutUtils::AppUnitWidthOfString(aString, aLength, aFontMetrics, + aContext); +} + nsBoundingMetrics nsLayoutUtils::AppUnitBoundsOfString(const char16_t* aString, uint32_t aLength, @@ -4799,26 +4810,6 @@ nsLayoutUtils::DrawUniDirString(const char16_t* aString, } } -nscoord -nsLayoutUtils::GetStringWidth(const nsIFrame* aFrame, - nsRenderingContext* aContext, - nsFontMetrics& aFontMetrics, - const char16_t* aString, - int32_t aLength) -{ - nsPresContext* presContext = aFrame->PresContext(); - if (presContext->BidiEnabled()) { - nsBidiLevel level = - nsBidiPresUtils::BidiLevelFromStyle(aFrame->StyleContext()); - return nsBidiPresUtils::MeasureTextWidth(aString, aLength, - level, presContext, *aContext, - aFontMetrics); - } - aFontMetrics.SetTextRunRTL(false); - return nsLayoutUtils::AppUnitWidthOfString(aString, aLength, aFontMetrics, - *aContext); -} - /* static */ void nsLayoutUtils::PaintTextShadow(const nsIFrame* aFrame, nsRenderingContext* aContext, diff --git a/layout/base/nsLayoutUtils.h b/layout/base/nsLayoutUtils.h index 12c5dc959e8..3c54f9182d3 100644 --- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -1326,11 +1326,28 @@ public: } static nscoord AppUnitWidthOfString(const nsString& aString, nsFontMetrics& aFontMetrics, - nsRenderingContext& aContext); + nsRenderingContext& aContext) { + return nsLayoutUtils::AppUnitWidthOfString(aString.get(), aString.Length(), + aFontMetrics, aContext); + } static nscoord AppUnitWidthOfString(const char16_t *aString, uint32_t aLength, nsFontMetrics& aFontMetrics, nsRenderingContext& aContext); + static nscoord AppUnitWidthOfStringBidi(const nsString& aString, + const nsIFrame* aFrame, + nsFontMetrics& aFontMetrics, + nsRenderingContext& aContext) { + return nsLayoutUtils::AppUnitWidthOfStringBidi(aString.get(), + aString.Length(), aFrame, + aFontMetrics, aContext); + } + static nscoord AppUnitWidthOfStringBidi(const char16_t* aString, + uint32_t aLength, + const nsIFrame* aFrame, + nsFontMetrics& aFontMetrics, + nsRenderingContext& aContext); + static nsBoundingMetrics AppUnitBoundsOfString(const char16_t* aString, uint32_t aLength, nsFontMetrics& aFontMetrics, @@ -1353,12 +1370,6 @@ public: nsFontMetrics& aFontMetrics, nsRenderingContext& aContext); - static nscoord GetStringWidth(const nsIFrame* aFrame, - nsRenderingContext* aContext, - nsFontMetrics& aFontMetrics, - const char16_t* aString, - int32_t aLength); - /** * Helper function for drawing text-shadow. The callback's job * is to draw whatever needs to be blurred onto the given context. diff --git a/layout/generic/TextOverflow.cpp b/layout/generic/TextOverflow.cpp index 1d512356d7a..95c8a39bb57 100644 --- a/layout/generic/TextOverflow.cpp +++ b/layout/generic/TextOverflow.cpp @@ -763,9 +763,8 @@ TextOverflow::Marker::SetupString(nsIFrame* aFrame) nsRefPtr fm; nsLayoutUtils::GetFontMetricsForFrame(aFrame, getter_AddRefs(fm), nsLayoutUtils::FontSizeInflationFor(aFrame)); - mWidth = nsLayoutUtils::GetStringWidth(aFrame, rc, *fm, - mStyle->mString.get(), - mStyle->mString.Length()); + mWidth = nsLayoutUtils::AppUnitWidthOfStringBidi(mStyle->mString, aFrame, + *fm, *rc); } mIntrinsicISize = mWidth; mInitialized = true; diff --git a/layout/generic/nsBulletFrame.cpp b/layout/generic/nsBulletFrame.cpp index 153ad918834..a5e263834f7 100644 --- a/layout/generic/nsBulletFrame.cpp +++ b/layout/generic/nsBulletFrame.cpp @@ -602,8 +602,8 @@ nsBulletFrame::GetDesiredSize(nsPresContext* aCX, GetListItemText(text); finalSize.BSize(wm) = fm->MaxHeight(); finalSize.ISize(wm) = - nsLayoutUtils::GetStringWidth(this, aRenderingContext, *fm, - text.get(), text.Length()); + nsLayoutUtils::AppUnitWidthOfStringBidi(text, this, *fm, + *aRenderingContext); aMetrics.SetBlockStartAscent(fm->MaxAscent()); break; } diff --git a/layout/generic/nsImageFrame.cpp b/layout/generic/nsImageFrame.cpp index c09191a101f..564c265671e 100644 --- a/layout/generic/nsImageFrame.cpp +++ b/layout/generic/nsImageFrame.cpp @@ -1035,7 +1035,8 @@ nsImageFrame::MeasureString(const char16_t* aString, // Measure this chunk of text, and see if it fits nscoord width = - nsLayoutUtils::GetStringWidth(this, &aContext, aFontMetrics, aString, len); + nsLayoutUtils::AppUnitWidthOfStringBidi(aString, len, this, aFontMetrics, + aContext); bool fits = (totalWidth + width) <= aMaxWidth; // If it fits on the line, or it's the first word we've processed then diff --git a/layout/generic/nsPageFrame.cpp b/layout/generic/nsPageFrame.cpp index 09bbd2560c9..a8c1fbb1ee5 100644 --- a/layout/generic/nsPageFrame.cpp +++ b/layout/generic/nsPageFrame.cpp @@ -243,10 +243,9 @@ nscoord nsPageFrame::GetXPosition(nsRenderingContext& aRenderingContext, int32_t aJust, const nsString& aStr) { - nscoord width = nsLayoutUtils::GetStringWidth(this, &aRenderingContext, - aFontMetrics, - aStr.get(), aStr.Length()); - + nscoord width = nsLayoutUtils::AppUnitWidthOfStringBidi(aStr, this, + aFontMetrics, + aRenderingContext); nscoord x = aRect.x; switch (aJust) { case nsIPrintSettings::kJustLeft: diff --git a/layout/xul/nsListBoxBodyFrame.cpp b/layout/xul/nsListBoxBodyFrame.cpp index d4053199aa6..8ecd8804256 100644 --- a/layout/xul/nsListBoxBodyFrame.cpp +++ b/layout/xul/nsListBoxBodyFrame.cpp @@ -727,8 +727,8 @@ nsListBoxBodyFrame::ComputeIntrinsicISize(nsBoxLayoutState& aBoxLayoutState) getter_AddRefs(fm)); nscoord textWidth = - nsLayoutUtils::GetStringWidth(this, rendContext, *fm, - value.get(), value.Length()); + nsLayoutUtils::AppUnitWidthOfStringBidi(value, this, *fm, + *rendContext); textWidth += width; if (textWidth > largestWidth) diff --git a/layout/xul/nsTextBoxFrame.cpp b/layout/xul/nsTextBoxFrame.cpp index dc01d3236f6..48bd36c7244 100644 --- a/layout/xul/nsTextBoxFrame.cpp +++ b/layout/xul/nsTextBoxFrame.cpp @@ -613,10 +613,9 @@ nsTextBoxFrame::CalculateTitleForWidth(nsPresContext* aPresContext, nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fm)); // see if the text will completely fit in the width given - nscoord titleWidth = nsLayoutUtils::GetStringWidth(this, &aRenderingContext, - *fm, - mTitle.get(), mTitle.Length()); - + nscoord titleWidth = + nsLayoutUtils::AppUnitWidthOfStringBidi(mTitle, this, *fm, + aRenderingContext); if (titleWidth <= aWidth) { mCroppedTitle = mTitle; if (HasRTLChars(mTitle)) { @@ -713,8 +712,8 @@ nsTextBoxFrame::CalculateTitleForWidth(nsPresContext* aPresContext, case CropCenter: { nscoord stringWidth = - nsLayoutUtils::GetStringWidth(this, &aRenderingContext, *fm, - mTitle.get(), mTitle.Length()); + nsLayoutUtils::AppUnitWidthOfStringBidi(mTitle, this, *fm, + aRenderingContext); if (stringWidth <= aWidth) { // the entire string will fit in the maximum width mCroppedTitle.Insert(mTitle, 0); @@ -771,8 +770,8 @@ nsTextBoxFrame::CalculateTitleForWidth(nsPresContext* aPresContext, break; } - return nsLayoutUtils::GetStringWidth(this, &aRenderingContext, *fm, - mCroppedTitle.get(), mCroppedTitle.Length()); + return nsLayoutUtils::AppUnitWidthOfStringBidi(mCroppedTitle, this, *fm, + aRenderingContext); } #define OLD_ELLIPSIS NS_LITERAL_STRING("...") @@ -1000,8 +999,8 @@ nsTextBoxFrame::GetTextSize(nsPresContext* aPresContext, nsLayoutUtils::GetFontMetricsForFrame(this, getter_AddRefs(fontMet)); aSize.height = fontMet->MaxHeight(); aSize.width = - nsLayoutUtils::GetStringWidth(this, &aRenderingContext, *fontMet, - aString.get(), aString.Length()); + nsLayoutUtils::AppUnitWidthOfStringBidi(aString, this, *fontMet, + aRenderingContext); aAscent = fontMet->MaxAscent(); } diff --git a/layout/xul/tree/nsTreeBodyFrame.cpp b/layout/xul/tree/nsTreeBodyFrame.cpp index ca1d0c1dafc..70a79f1b714 100644 --- a/layout/xul/tree/nsTreeBodyFrame.cpp +++ b/layout/xul/tree/nsTreeBodyFrame.cpp @@ -1319,9 +1319,9 @@ nsTreeBodyFrame::AdjustForCellText(nsAutoString& aText, { NS_PRECONDITION(aColumn && aColumn->GetFrame(), "invalid column passed"); - nscoord width = - nsLayoutUtils::GetStringWidth(this, &aRenderingContext, aFontMetrics, - aText.get(), aText.Length()); + nscoord width = nsLayoutUtils::AppUnitWidthOfStringBidi(aText, this, + aFontMetrics, + aRenderingContext); nscoord maxWidth = aTextRect.width; if (aColumn->Overflow()) { @@ -1459,9 +1459,8 @@ nsTreeBodyFrame::AdjustForCellText(nsAutoString& aText, } } - width = nsLayoutUtils::GetStringWidth(this, &aRenderingContext, - aFontMetrics, aText.get(), - aText.Length()); + width = nsLayoutUtils::AppUnitWidthOfStringBidi(aText, this, aFontMetrics, + aRenderingContext); } switch (aColumn->GetTextAlignment()) { @@ -1748,9 +1747,8 @@ nsTreeBodyFrame::GetCellWidth(int32_t aRow, nsTreeColumn* aCol, nsLayoutUtils::GetFontMetricsForStyleContext(textContext, getter_AddRefs(fm)); // Get the width of the text itself - nscoord width = - nsLayoutUtils::GetStringWidth(this, aRenderingContext, *fm, - cellText.get(), cellText.Length()); + nscoord width = nsLayoutUtils::AppUnitWidthOfStringBidi(cellText, this, *fm, + *aRenderingContext); nscoord totalTextWidth = width + bp.left + bp.right; aDesiredSize += totalTextWidth; return NS_OK; From 68a8947f76847eb0e031492bbe68801dcb499567 Mon Sep 17 00:00:00 2001 From: Jonathan Watt Date: Sun, 26 Oct 2014 18:00:03 +0000 Subject: [PATCH 04/52] Bug 1080688 - Calculate SVG rect bounds using a simple rect transform rather than using a Moz2D Path. r=longsonr --- dom/svg/SVGRectElement.cpp | 32 ++++ dom/svg/SVGRectElement.h | 2 + dom/svg/nsSVGPathGeometryElement.h | 6 + layout/style/nsStyleStruct.h | 4 + layout/svg/nsSVGPathGeometryFrame.cpp | 211 ++++++++++++++------------ 5 files changed, 159 insertions(+), 96 deletions(-) diff --git a/dom/svg/SVGRectElement.cpp b/dom/svg/SVGRectElement.cpp index f3b9c8833fd..8f32cf14b10 100644 --- a/dom/svg/SVGRectElement.cpp +++ b/dom/svg/SVGRectElement.cpp @@ -7,6 +7,8 @@ #include "nsGkAtoms.h" #include "mozilla/dom/SVGRectElementBinding.h" #include "mozilla/gfx/2D.h" +#include "mozilla/gfx/Matrix.h" +#include "mozilla/gfx/Rect.h" #include "mozilla/gfx/PathHelpers.h" #include @@ -108,6 +110,36 @@ SVGRectElement::GetLengthInfo() //---------------------------------------------------------------------- // nsSVGPathGeometryElement methods +bool +SVGRectElement::GetGeometryBounds(Rect* aBounds, Float aStrokeWidth, + const Matrix& aTransform) +{ + Rect r; + Float rx, ry; + GetAnimatedLengthValues(&r.x, &r.y, &r.width, &r.height, &rx, &ry, nullptr); + + if (r.IsEmpty()) { + // Rendering of the element disabled + r.SetEmpty(); // make sure width/height are actually zero + *aBounds = r; + return true; + } + + rx = std::max(rx, 0.0f); + ry = std::max(ry, 0.0f); + + if (rx != 0 || ry != 0) { + return false; + } + + if (aStrokeWidth > 0.f) { + r.Inflate(aStrokeWidth / 2.f); + } + + *aBounds = aTransform.TransformBounds(r); + return true; +} + void SVGRectElement::GetAsSimplePath(SimplePath* aSimplePath) { diff --git a/dom/svg/SVGRectElement.h b/dom/svg/SVGRectElement.h index 58ed60470aa..3340ecf45ce 100644 --- a/dom/svg/SVGRectElement.h +++ b/dom/svg/SVGRectElement.h @@ -30,6 +30,8 @@ public: virtual bool HasValidDimensions() const MOZ_OVERRIDE; // nsSVGPathGeometryElement methods: + virtual bool GetGeometryBounds(Rect* aBounds, Float aStrokeWidth, + const Matrix& aTransform) MOZ_OVERRIDE; virtual void GetAsSimplePath(SimplePath* aSimplePath) MOZ_OVERRIDE; virtual TemporaryRef BuildPath(PathBuilder* aBuilder = nullptr) MOZ_OVERRIDE; diff --git a/dom/svg/nsSVGPathGeometryElement.h b/dom/svg/nsSVGPathGeometryElement.h index 44d81a3627d..c55021b48f3 100644 --- a/dom/svg/nsSVGPathGeometryElement.h +++ b/dom/svg/nsSVGPathGeometryElement.h @@ -34,6 +34,7 @@ protected: typedef mozilla::gfx::DrawTarget DrawTarget; typedef mozilla::gfx::FillRule FillRule; typedef mozilla::gfx::Float Float; + typedef mozilla::gfx::Matrix Matrix; typedef mozilla::gfx::Path Path; typedef mozilla::gfx::Point Point; typedef mozilla::gfx::PathBuilder PathBuilder; @@ -69,6 +70,11 @@ public: virtual bool IsMarkable(); virtual void GetMarkPoints(nsTArray *aMarks); + virtual bool GetGeometryBounds(Rect* aBounds, Float aStrokeWidth, + const Matrix& aTransform) { + return false; + } + /** * For use with GetAsSimplePath. */ diff --git a/layout/style/nsStyleStruct.h b/layout/style/nsStyleStruct.h index 291645414fe..ce642c5aea6 100644 --- a/layout/style/nsStyleStruct.h +++ b/layout/style/nsStyleStruct.h @@ -3040,6 +3040,10 @@ struct nsStyleSVGReset { return mFilters.Length() > 0; } + bool HasNonScalingStroke() const { + return mVectorEffect == NS_STYLE_VECTOR_EFFECT_NON_SCALING_STROKE; + } + nsStyleClipPath mClipPath; // [reset] nsTArray mFilters; // [reset] nsCOMPtr mMask; // [reset] diff --git a/layout/svg/nsSVGPathGeometryFrame.cpp b/layout/svg/nsSVGPathGeometryFrame.cpp index fca4d96002e..b7e8fd503fc 100644 --- a/layout/svg/nsSVGPathGeometryFrame.cpp +++ b/layout/svg/nsSVGPathGeometryFrame.cpp @@ -463,113 +463,132 @@ nsSVGPathGeometryFrame::GetBBoxContribution(const Matrix &aToBBoxUserspace, nsSVGPathGeometryElement* element = static_cast(mContent); - RefPtr tmpDT; + bool getFill = (aFlags & nsSVGUtils::eBBoxIncludeFillGeometry) || + ((aFlags & nsSVGUtils::eBBoxIncludeFill) && + StyleSVG()->mFill.mType != eStyleSVGPaintType_None); + + bool getStroke = (aFlags & nsSVGUtils::eBBoxIncludeStrokeGeometry) || + ((aFlags & nsSVGUtils::eBBoxIncludeStroke) && + nsSVGUtils::HasStroke(this)); + + bool gotSimpleBounds = false; + if (!StyleSVGReset()->HasNonScalingStroke()) { + Float strokeWidth = getStroke ? nsSVGUtils::GetStrokeWidth(this) : 0.f; + Rect simpleBounds; + gotSimpleBounds = element->GetGeometryBounds(&simpleBounds, strokeWidth, + aToBBoxUserspace); + if (gotSimpleBounds) { + bbox = simpleBounds; + } + } + + if (!gotSimpleBounds) { + // Get the bounds using a Moz2D Path object (more expensive): + RefPtr tmpDT; #ifdef XP_WIN - // Unfortunately D2D backed DrawTarget produces bounds with rounding errors - // when whole number results are expected, even in the case of trivial - // calculations. To avoid that and meet the expectations of web content we - // have to use a CAIRO DrawTarget. The most efficient way to do that is to - // wrap the cached cairo_surface_t from ScreenReferenceSurface(): - nsRefPtr refSurf = - gfxPlatform::GetPlatform()->ScreenReferenceSurface(); - tmpDT = gfxPlatform::GetPlatform()-> - CreateDrawTargetForSurface(refSurf, IntSize(1, 1)); + // Unfortunately D2D backed DrawTarget produces bounds with rounding errors + // when whole number results are expected, even in the case of trivial + // calculations. To avoid that and meet the expectations of web content we + // have to use a CAIRO DrawTarget. The most efficient way to do that is to + // wrap the cached cairo_surface_t from ScreenReferenceSurface(): + nsRefPtr refSurf = + gfxPlatform::GetPlatform()->ScreenReferenceSurface(); + tmpDT = gfxPlatform::GetPlatform()-> + CreateDrawTargetForSurface(refSurf, IntSize(1, 1)); #else - tmpDT = gfxPlatform::GetPlatform()->ScreenReferenceDrawTarget(); + tmpDT = gfxPlatform::GetPlatform()->ScreenReferenceDrawTarget(); #endif - FillRule fillRule = nsSVGUtils::ToFillRule(StyleSVG()->mFillRule); - RefPtr pathInUserSpace = element->GetOrBuildPath(*tmpDT, fillRule); - if (!pathInUserSpace) { - return bbox; - } - RefPtr pathInBBoxSpace; - if (aToBBoxUserspace.IsIdentity()) { - pathInBBoxSpace = pathInUserSpace; - } else { - RefPtr builder = - pathInUserSpace->TransformedCopyToBuilder(aToBBoxUserspace, fillRule); - pathInBBoxSpace = builder->Finish(); - if (!pathInBBoxSpace) { + FillRule fillRule = nsSVGUtils::ToFillRule(StyleSVG()->mFillRule); + RefPtr pathInUserSpace = element->GetOrBuildPath(*tmpDT, fillRule); + if (!pathInUserSpace) { return bbox; } - } - - // Be careful when replacing the following logic to get the fill and stroke - // extents independently (instead of computing the stroke extents from the - // path extents). You may think that you can just use the stroke extents if - // there is both a fill and a stroke. In reality it's necessary to calculate - // both the fill and stroke extents, and take the union of the two. There are - // two reasons for this: - // - // # Due to stroke dashing, in certain cases the fill extents could actually - // extend outside the stroke extents. - // # If the stroke is very thin, cairo won't paint any stroke, and so the - // stroke bounds that it will return will be empty. - - Rect pathBBoxExtents = pathInBBoxSpace->GetBounds(); - if (!pathBBoxExtents.IsFinite()) { - // This can happen in the case that we only have a move-to command in the - // path commands, in which case we know nothing gets rendered. - return bbox; - } - - // Account for fill: - if ((aFlags & nsSVGUtils::eBBoxIncludeFillGeometry) || - ((aFlags & nsSVGUtils::eBBoxIncludeFill) && - StyleSVG()->mFill.mType != eStyleSVGPaintType_None)) { - bbox = pathBBoxExtents; - } - - // Account for stroke: - if ((aFlags & nsSVGUtils::eBBoxIncludeStrokeGeometry) || - ((aFlags & nsSVGUtils::eBBoxIncludeStroke) && - nsSVGUtils::HasStroke(this))) { -#if 0 - // This disabled code is how we would calculate the stroke bounds using - // Moz2D Path::GetStrokedBounds(). Unfortunately at the time of writing it - // there are two problems that prevent us from using it. - // - // First, it seems that some of the Moz2D backends are really dumb. Not - // only do some GetStrokeOptions() implementations sometimes significantly - // overestimate the stroke bounds, but if an argument is passed for the - // aTransform parameter then they just return bounds-of-transformed-bounds. - // These two things combined can lead the bounds to be unacceptably - // oversized, leading to massive over-invalidation. - // - // Second, the way we account for non-scaling-stroke by transforming the - // path using the transform to the outer- element is not compatible - // with the way that nsSVGPathGeometryFrame::Reflow() inserts a scale into - // aToBBoxUserspace and then scales the bounds that we return. - SVGContentUtils::AutoStrokeOptions strokeOptions; - SVGContentUtils::GetStrokeOptions(&strokeOptions, element, StyleContext(), - nullptr, SVGContentUtils::eIgnoreStrokeDashing); - Rect strokeBBoxExtents; - gfxMatrix userToOuterSVG; - if (nsSVGUtils::GetNonScalingStrokeTransform(this, &userToOuterSVG)) { - Matrix outerSVGToUser = ToMatrix(userToOuterSVG); - outerSVGToUser.Invert(); - Matrix outerSVGToBBox = aToBBoxUserspace * outerSVGToUser; - RefPtr builder = - pathInUserSpace->TransformedCopyToBuilder(ToMatrix(userToOuterSVG)); - RefPtr pathInOuterSVGSpace = builder->Finish(); - strokeBBoxExtents = - pathInOuterSVGSpace->GetStrokedBounds(strokeOptions, outerSVGToBBox); + RefPtr pathInBBoxSpace; + if (aToBBoxUserspace.IsIdentity()) { + pathInBBoxSpace = pathInUserSpace; } else { - strokeBBoxExtents = - pathInUserSpace->GetStrokedBounds(strokeOptions, aToBBoxUserspace); + RefPtr builder = + pathInUserSpace->TransformedCopyToBuilder(aToBBoxUserspace, fillRule); + pathInBBoxSpace = builder->Finish(); + if (!pathInBBoxSpace) { + return bbox; + } } - MOZ_ASSERT(strokeBBoxExtents.IsFinite(), "bbox is about to go bad"); - bbox.UnionEdges(strokeBBoxExtents); + + // Be careful when replacing the following logic to get the fill and stroke + // extents independently (instead of computing the stroke extents from the + // path extents). You may think that you can just use the stroke extents if + // there is both a fill and a stroke. In reality it's necessary to + // calculate both the fill and stroke extents, and take the union of the + // two. There are two reasons for this: + // + // # Due to stroke dashing, in certain cases the fill extents could + // actually extend outside the stroke extents. + // # If the stroke is very thin, cairo won't paint any stroke, and so the + // stroke bounds that it will return will be empty. + + Rect pathBBoxExtents = pathInBBoxSpace->GetBounds(); + if (!pathBBoxExtents.IsFinite()) { + // This can happen in the case that we only have a move-to command in the + // path commands, in which case we know nothing gets rendered. + return bbox; + } + + // Account for fill: + if (getFill) { + bbox = pathBBoxExtents; + } + + // Account for stroke: + if (getStroke) { +#if 0 + // This disabled code is how we would calculate the stroke bounds using + // Moz2D Path::GetStrokedBounds(). Unfortunately at the time of writing + // it there are two problems that prevent us from using it. + // + // First, it seems that some of the Moz2D backends are really dumb. Not + // only do some GetStrokeOptions() implementations sometimes + // significantly overestimate the stroke bounds, but if an argument is + // passed for the aTransform parameter then they just return bounds-of- + // transformed-bounds. These two things combined can lead the bounds to + // be unacceptably oversized, leading to massive over-invalidation. + // + // Second, the way we account for non-scaling-stroke by transforming the + // path using the transform to the outer- element is not compatible + // with the way that nsSVGPathGeometryFrame::Reflow() inserts a scale + // into aToBBoxUserspace and then scales the bounds that we return. + SVGContentUtils::AutoStrokeOptions strokeOptions; + SVGContentUtils::GetStrokeOptions(&strokeOptions, element, + StyleContext(), nullptr, + SVGContentUtils::eIgnoreStrokeDashing); + Rect strokeBBoxExtents; + gfxMatrix userToOuterSVG; + if (nsSVGUtils::GetNonScalingStrokeTransform(this, &userToOuterSVG)) { + Matrix outerSVGToUser = ToMatrix(userToOuterSVG); + outerSVGToUser.Invert(); + Matrix outerSVGToBBox = aToBBoxUserspace * outerSVGToUser; + RefPtr builder = + pathInUserSpace->TransformedCopyToBuilder(ToMatrix(userToOuterSVG)); + RefPtr pathInOuterSVGSpace = builder->Finish(); + strokeBBoxExtents = + pathInOuterSVGSpace->GetStrokedBounds(strokeOptions, outerSVGToBBox); + } else { + strokeBBoxExtents = + pathInUserSpace->GetStrokedBounds(strokeOptions, aToBBoxUserspace); + } + MOZ_ASSERT(strokeBBoxExtents.IsFinite(), "bbox is about to go bad"); + bbox.UnionEdges(strokeBBoxExtents); #else // For now we just use nsSVGUtils::PathExtentsToMaxStrokeExtents: - gfxRect strokeBBoxExtents = - nsSVGUtils::PathExtentsToMaxStrokeExtents(ThebesRect(pathBBoxExtents), - this, - ThebesMatrix(aToBBoxUserspace)); - MOZ_ASSERT(ToRect(strokeBBoxExtents).IsFinite(), "bbox is about to go bad"); - bbox.UnionEdges(strokeBBoxExtents); + gfxRect strokeBBoxExtents = + nsSVGUtils::PathExtentsToMaxStrokeExtents(ThebesRect(pathBBoxExtents), + this, + ThebesMatrix(aToBBoxUserspace)); + MOZ_ASSERT(ToRect(strokeBBoxExtents).IsFinite(), "bbox is about to go bad"); + bbox.UnionEdges(strokeBBoxExtents); #endif + } } // Account for markers: From 6705ab77535eaf40ab616c2e00b236ad18ecc4a9 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 9 Oct 2014 19:28:33 -0700 Subject: [PATCH 05/52] Bug 1076446 (attempt 2) - Make the DMD test work on Windows. r=glandium. --- memory/replace/dmd/DMD.cpp | 327 +---------------- memory/replace/dmd/DMD.h | 8 + memory/replace/dmd/dmd.py | 18 +- memory/replace/dmd/moz.build | 4 +- memory/replace/dmd/test/SmokeDMD.cpp | 335 ++++++++++++++++++ .../dmd/test/full-heap-empty-expected.txt | 2 +- .../dmd/test/full-heap-sampled-expected.txt | 2 +- .../test/full-heap-unsampled1-expected.txt | 2 +- .../test/full-heap-unsampled2-expected.txt | 2 +- .../dmd/test/full-reports-empty-expected.txt | 2 +- .../test/full-reports-sampled-expected.txt | 2 +- .../test/full-reports-unsampled1-expected.txt | 2 +- .../test/full-reports-unsampled2-expected.txt | 2 +- memory/replace/dmd/test/moz.build | 26 ++ memory/replace/dmd/test/test_dmd.js | 106 ++++-- memory/replace/dmd/test/xpcshell.ini | 5 +- python/mozbuild/mozbuild/mach_commands.py | 6 +- testing/mochitest/Makefile.in | 5 +- testing/xpcshell/runxpcshelltests.py | 4 +- toolkit/mozapps/installer/packager.mk | 7 +- 20 files changed, 491 insertions(+), 376 deletions(-) create mode 100644 memory/replace/dmd/test/SmokeDMD.cpp create mode 100644 memory/replace/dmd/test/moz.build diff --git a/memory/replace/dmd/DMD.cpp b/memory/replace/dmd/DMD.cpp index d0b89d18446..29ae6be0205 100644 --- a/memory/replace/dmd/DMD.cpp +++ b/memory/replace/dmd/DMD.cpp @@ -227,18 +227,6 @@ InfallibleAllocPolicy::ExitOnFailure(const void* aP) } } -class FpWriteFunc : public JSONWriteFunc -{ -public: - explicit FpWriteFunc(FILE* aFp) : mFp(aFp) {} - ~FpWriteFunc() { fclose(mFp); } - - void Write(const char* aStr) { fputs(aStr, mFp); } - -private: - FILE* mFp; -}; - static double Percent(size_t part, size_t whole) { @@ -289,17 +277,11 @@ class Options {} }; - enum Mode { - Normal, // run normally - Test // do some basic correctness tests - }; - char* mDMDEnvVar; // a saved copy, for later printing NumOption mSampleBelowSize; NumOption mMaxFrames; bool mShowDumpStats; - Mode mMode; void BadArg(const char* aArg); static const char* ValueIfMatch(const char* aArg, const char* aOptionName); @@ -316,9 +298,7 @@ public: size_t MaxFrames() const { return mMaxFrames.mActual; } size_t ShowDumpStats() const { return mShowDumpStats; } - void SetSampleBelowSize(size_t aN) { mSampleBelowSize.mActual = aN; } - - bool IsTestMode() const { return mMode == Test; } + void SetSampleBelowSize(size_t aSize) { mSampleBelowSize.mActual = aSize; } }; static Options *gOptions; @@ -1278,8 +1258,7 @@ Options::Options(const char* aDMDEnvVar) : mDMDEnvVar(InfallibleAllocPolicy::strdup_(aDMDEnvVar)), mSampleBelowSize(4093, 100 * 100 * 1000), mMaxFrames(StackTrace::MaxFrames, StackTrace::MaxFrames), - mShowDumpStats(false), - mMode(Normal) + mShowDumpStats(false) { char* e = mDMDEnvVar; if (strcmp(e, "1") != 0) { @@ -1314,11 +1293,6 @@ Options::Options(const char* aDMDEnvVar) } else if (GetBool(arg, "--show-dump-stats", &myBool)) { mShowDumpStats = myBool; - } else if (strcmp(arg, "--mode=normal") == 0) { - mMode = Options::Normal; - } else if (strcmp(arg, "--mode=test") == 0) { - mMode = Options::Test; - } else if (strcmp(arg, "") == 0) { // This can only happen if there is trailing whitespace. Ignore. MOZ_ASSERT(isEnd); @@ -1354,7 +1328,6 @@ Options::BadArg(const char* aArg) int(mMaxFrames.mMax), int(mMaxFrames.mDefault)); StatusMsg(" --show-dump-stats= Show stats about dumps? [no]\n"); - StatusMsg(" --mode= Mode of operation [normal]\n"); StatusMsg("\n"); exit(1); } @@ -1371,21 +1344,6 @@ NopStackWalkCallback(uint32_t aFrameNumber, void* aPc, void* aSp, } #endif -// Note that fopen() can allocate. -static FILE* -OpenOutputFile(const char* aFilename) -{ - FILE* fp = fopen(aFilename, "w"); - if (!fp) { - StatusMsg("can't create %s file: %s\n", aFilename, strerror(errno)); - exit(1); - } - return fp; -} - -static void RunTestMode(UniquePtr aF1, UniquePtr aF2, - UniquePtr aF3, UniquePtr aF4); - // WARNING: this function runs *very* early -- before all static initializers // have run. For this reason, non-scalar globals such as gStateLock and // gStackTraceTable are allocated dynamically (so we can guarantee their @@ -1439,31 +1397,7 @@ Init(const malloc_table_t* aMallocTable) gBlockTable->init(8192); } - if (gOptions->IsTestMode()) { - // Do all necessary allocations before setting gIsDMDRunning so those - // allocations don't show up in our results. Once gIsDMDRunning is set we - // are intercepting malloc et al. in earnest. - // - // These files are written to $CWD. It would probably be better to write - // them to "TmpD" using the directory service, but that would require - // linking DMD with XPCOM. - auto f1 = MakeUnique(OpenOutputFile("full-empty.json")); - auto f2 = MakeUnique(OpenOutputFile("full-unsampled1.json")); - auto f3 = MakeUnique(OpenOutputFile("full-unsampled2.json")); - auto f4 = MakeUnique(OpenOutputFile("full-sampled.json")); - gIsDMDRunning = true; - - StatusMsg("running test mode...\n"); - RunTestMode(Move(f1), Move(f2), Move(f3), Move(f4)); - StatusMsg("finished test mode; DMD is now disabled again\n"); - - // Continue running so that the xpcshell test can complete, but DMD no - // longer needs to be running. - gIsDMDRunning = false; - - } else { - gIsDMDRunning = true; - } + gIsDMDRunning = true; } //--------------------------------------------------------------------------- @@ -1850,260 +1784,17 @@ AnalyzeReports(JSONWriter& aWriter) // Testing //--------------------------------------------------------------------------- -// This function checks that heap blocks that have the same stack trace but -// different (or no) reporters get aggregated separately. -void Foo(int aSeven) +MOZ_EXPORT void +SetSampleBelowSize(size_t aSize) { - char* a[6]; - for (int i = 0; i < aSeven - 1; i++) { - a[i] = (char*) replace_malloc(128 - 16*i); - } - - for (int i = 0; i < aSeven - 5; i++) { - Report(a[i]); // reported - } - Report(a[2]); // reported - Report(a[3]); // reported - // a[4], a[5] unreported + gOptions->SetSampleBelowSize(aSize); } -// This stops otherwise-unused variables from being optimized away. -static void -UseItOrLoseIt(void* aPtr, int aSeven) +MOZ_EXPORT void +ClearBlocks() { - char buf[64]; - int n = sprintf(buf, "%p\n", aPtr); - if (n == 20 + aSeven) { - fprintf(stderr, "well, that is surprising"); - } -} - -// The output from this function feeds into DMD's xpcshell test. -static void -RunTestMode(UniquePtr aF1, UniquePtr aF2, - UniquePtr aF3, UniquePtr aF4) -{ - // This test relies on the compiler not doing various optimizations, such as - // eliding unused replace_malloc() calls or unrolling loops with fixed - // iteration counts. So we want a constant value that the compiler can't - // determine statically, and we use that in various ways to prevent the above - // optimizations from happening. - // - // This code always sets |seven| to the value 7. It works because we know - // that "--mode=test" must be within the DMD environment variable if we reach - // here, but the compiler almost certainly does not. - // - char* env = getenv("DMD"); - char* p1 = strstr(env, "--mode=t"); - char* p2 = strstr(p1, "test"); - int seven = p2 - p1; - - // The first part of this test requires sampling to be disabled. - gOptions->SetSampleBelowSize(1); - - //--------- - - // AnalyzeReports 1. Zero for everything. - JSONWriter writer1(Move(aF1)); - AnalyzeReports(writer1); - - //--------- - - // AnalyzeReports 2: 1 freed, 9 out of 10 unreported. - // AnalyzeReports 3: still present and unreported. - int i; - char* a = nullptr; - for (i = 0; i < seven + 3; i++) { - a = (char*) replace_malloc(100); - UseItOrLoseIt(a, seven); - } - replace_free(a); - - // Note: 8 bytes is the smallest requested size that gives consistent - // behaviour across all platforms with jemalloc. - // AnalyzeReports 2: reported. - // AnalyzeReports 3: thrice-reported. - char* a2 = (char*) replace_malloc(8); - Report(a2); - - // AnalyzeReports 2: reported. - // AnalyzeReports 3: reportedness carries over, due to ReportOnAlloc. - char* b = (char*) replace_malloc(10); - ReportOnAlloc(b); - - // ReportOnAlloc, then freed. - // AnalyzeReports 2: freed, irrelevant. - // AnalyzeReports 3: freed, irrelevant. - char* b2 = (char*) replace_malloc(1); - ReportOnAlloc(b2); - replace_free(b2); - - // AnalyzeReports 2: reported 4 times. - // AnalyzeReports 3: freed, irrelevant. - char* c = (char*) replace_calloc(10, 3); - Report(c); - for (int i = 0; i < seven - 4; i++) { - Report(c); - } - - // AnalyzeReports 2: ignored. - // AnalyzeReports 3: irrelevant. - Report((void*)(intptr_t)i); - - // jemalloc rounds this up to 8192. - // AnalyzeReports 2: reported. - // AnalyzeReports 3: freed. - char* e = (char*) replace_malloc(4096); - e = (char*) replace_realloc(e, 4097); - Report(e); - - // First realloc is like malloc; second realloc is shrinking. - // AnalyzeReports 2: reported. - // AnalyzeReports 3: re-reported. - char* e2 = (char*) replace_realloc(nullptr, 1024); - e2 = (char*) replace_realloc(e2, 512); - Report(e2); - - // First realloc is like malloc; second realloc creates a min-sized block. - // XXX: on Windows, second realloc frees the block. - // AnalyzeReports 2: reported. - // AnalyzeReports 3: freed, irrelevant. - char* e3 = (char*) replace_realloc(nullptr, 1023); -//e3 = (char*) replace_realloc(e3, 0); - MOZ_ASSERT(e3); - Report(e3); - - // AnalyzeReports 2: freed, irrelevant. - // AnalyzeReports 3: freed, irrelevant. - char* f = (char*) replace_malloc(64); - replace_free(f); - - // AnalyzeReports 2: ignored. - // AnalyzeReports 3: irrelevant. - Report((void*)(intptr_t)0x0); - - // AnalyzeReports 2: mixture of reported and unreported. - // AnalyzeReports 3: all unreported. - Foo(seven); - Foo(seven); - - // AnalyzeReports 2: twice-reported. - // AnalyzeReports 3: twice-reported. - char* g1 = (char*) replace_malloc(77); - ReportOnAlloc(g1); - ReportOnAlloc(g1); - - // AnalyzeReports 2: twice-reported. - // AnalyzeReports 3: once-reported. - char* g2 = (char*) replace_malloc(78); - Report(g2); - ReportOnAlloc(g2); - - // AnalyzeReports 2: twice-reported. - // AnalyzeReports 3: once-reported. - char* g3 = (char*) replace_malloc(79); - ReportOnAlloc(g3); - Report(g3); - - // All the odd-ball ones. - // AnalyzeReports 2: all unreported. - // AnalyzeReports 3: all freed, irrelevant. - // XXX: no memalign on Mac -//void* x = memalign(64, 65); // rounds up to 128 -//UseItOrLoseIt(x, seven); - // XXX: posix_memalign doesn't work on B2G -//void* y; -//posix_memalign(&y, 128, 129); // rounds up to 256 -//UseItOrLoseIt(y, seven); - // XXX: valloc doesn't work on Windows. -//void* z = valloc(1); // rounds up to 4096 -//UseItOrLoseIt(z, seven); -//aligned_alloc(64, 256); // XXX: C11 only - - // AnalyzeReports 2. - JSONWriter writer2(Move(aF2)); - AnalyzeReports(writer2); - - //--------- - - Report(a2); - Report(a2); - replace_free(c); - replace_free(e); - Report(e2); - replace_free(e3); -//replace_free(x); -//replace_free(y); -//replace_free(z); - - // AnalyzeReports 3. - JSONWriter writer3(Move(aF3)); - AnalyzeReports(writer3); - - //--------- - - // Clear all knowledge of existing blocks to give us a clean slate. gBlockTable->clear(); - - gOptions->SetSampleBelowSize(128); - - char* s; - - // This equals the sample size, and so is reported exactly. It should be - // listed before records of the same size that are sampled. - s = (char*) replace_malloc(128); - UseItOrLoseIt(s, seven); - - // This exceeds the sample size, and so is reported exactly. - s = (char*) replace_malloc(144); - UseItOrLoseIt(s, seven); - - // These together constitute exactly one sample. - for (int i = 0; i < seven + 9; i++) { - s = (char*) replace_malloc(8); - UseItOrLoseIt(s, seven); - } - MOZ_ASSERT(gSmallBlockActualSizeCounter == 0); - - // These fall 8 bytes short of a full sample. - for (int i = 0; i < seven + 8; i++) { - s = (char*) replace_malloc(8); - UseItOrLoseIt(s, seven); - } - MOZ_ASSERT(gSmallBlockActualSizeCounter == 120); - - // This exceeds the sample size, and so is recorded exactly. - s = (char*) replace_malloc(256); - UseItOrLoseIt(s, seven); - MOZ_ASSERT(gSmallBlockActualSizeCounter == 120); - - // This gets more than to a full sample from the |i < 15| loop above. - s = (char*) replace_malloc(96); - UseItOrLoseIt(s, seven); - MOZ_ASSERT(gSmallBlockActualSizeCounter == 88); - - // This gets to another full sample. - for (int i = 0; i < seven - 2; i++) { - s = (char*) replace_malloc(8); - UseItOrLoseIt(s, seven); - } - MOZ_ASSERT(gSmallBlockActualSizeCounter == 0); - - // This allocates 16, 32, ..., 128 bytes, which results in a heap block - // record that contains a mix of sample and non-sampled blocks, and so should - // be printed with '~' signs. - for (int i = 1; i <= seven + 1; i++) { - s = (char*) replace_malloc(i * 16); - UseItOrLoseIt(s, seven); - } - MOZ_ASSERT(gSmallBlockActualSizeCounter == 64); - - // At the end we're 64 bytes into the current sample so we report ~1,424 - // bytes of allocation overall, which is 64 less than the real value 1,488. - - // AnalyzeReports 4. - JSONWriter writer4(Move(aF4)); - AnalyzeReports(writer4); + gSmallBlockActualSizeCounter = 0; } } // namespace dmd diff --git a/memory/replace/dmd/DMD.h b/memory/replace/dmd/DMD.h index b7d776e065b..7a39551a7c6 100644 --- a/memory/replace/dmd/DMD.h +++ b/memory/replace/dmd/DMD.h @@ -147,6 +147,14 @@ StatusMsg(const char* aFmt, ...); MOZ_EXPORT bool IsRunning(); +// Sets the sample-below size. Only used for testing purposes. +MOZ_EXPORT void +SetSampleBelowSize(size_t aSize); + +// Clears all records of live allocations. Only used for testing purposes. +MOZ_EXPORT void +ClearBlocks(); + } // namespace mozilla } // namespace dmd diff --git a/memory/replace/dmd/dmd.py b/memory/replace/dmd/dmd.py index f396bb5ebbf..325d27ca78b 100755 --- a/memory/replace/dmd/dmd.py +++ b/memory/replace/dmd/dmd.py @@ -1,4 +1,4 @@ -#! /usr/bin/python +#! /usr/bin/env python # # 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 @@ -344,15 +344,17 @@ def main(): fmt = ' #{:02d}{:}' if args.filter_stacks_for_testing: - # If any frame has "DMD.cpp" or "replace_malloc.c" in its - # description -- as should be the case for every stack trace when - # running DMD in test mode -- we replace the entire trace with a - # single, predictable frame. There is too much variation in the - # stack traces across different machines and platforms to do more - # specific matching. + # When running SmokeDMD.cpp, every stack trace should contain at + # least one frame that contains 'DMD.cpp', from either |DMD.cpp| or + # |SmokeDMD.cpp|. (Or 'dmd.cpp' on Windows.) If we see such a + # frame, we replace the entire stack trace with a single, + # predictable frame. There is too much variation in the stack + # traces across different machines and platforms to do more precise + # matching, but this level of matching will result in failure if + # stack fixing fails completely. for frameKey in frameKeys: frameDesc = frameTable[frameKey] - if 'DMD.cpp' in frameDesc or 'replace_malloc.c' in frameDesc: + if 'DMD.cpp' in frameDesc or 'dmd.cpp' in frameDesc: out(fmt.format(1, ': ... DMD.cpp ...')) return diff --git a/memory/replace/dmd/moz.build b/memory/replace/dmd/moz.build index f8121eeac2a..f1b9e0a4ea7 100644 --- a/memory/replace/dmd/moz.build +++ b/memory/replace/dmd/moz.build @@ -33,7 +33,5 @@ if CONFIG['OS_ARCH'] == 'WINNT': 'dbghelp', ] -XPCSHELL_TESTS_MANIFESTS += [ - 'test/xpcshell.ini', -] +TEST_DIRS += ['test'] diff --git a/memory/replace/dmd/test/SmokeDMD.cpp b/memory/replace/dmd/test/SmokeDMD.cpp new file mode 100644 index 00000000000..74257187f35 --- /dev/null +++ b/memory/replace/dmd/test/SmokeDMD.cpp @@ -0,0 +1,335 @@ +/* -*- 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/. */ + +// This program is used by the DMD xpcshell test. It is run under DMD and +// produces some output. The xpcshell test then post-processes and checks this +// output. +// +// Note that this file does not have "Test" or "test" in its name, because that +// will cause the build system to not record breakpad symbols for it, which +// will stop the post-processing (which includes stack fixing) from working +// correctly. + +#include +#include +#include + +#include "mozilla/Assertions.h" +#include "mozilla/JSONWriter.h" +#include "mozilla/UniquePtr.h" +#include "DMD.h" + +using mozilla::JSONWriter; +using mozilla::MakeUnique; +using namespace mozilla::dmd; + +class FpWriteFunc : public mozilla::JSONWriteFunc +{ +public: + explicit FpWriteFunc(const char* aFilename) + { + mFp = fopen(aFilename, "w"); + if (!mFp) { + fprintf(stderr, "SmokeDMD: can't create %s file: %s\n", + aFilename, strerror(errno)); + exit(1); + } + } + + ~FpWriteFunc() { fclose(mFp); } + + void Write(const char* aStr) { fputs(aStr, mFp); } + +private: + FILE* mFp; +}; + +// This stops otherwise-unused variables from being optimized away. +static void +UseItOrLoseIt(void* aPtr, int aSeven) +{ + char buf[64]; + int n = sprintf(buf, "%p\n", aPtr); + if (n == 20 + aSeven) { + fprintf(stderr, "well, that is surprising"); + } +} + +// This function checks that heap blocks that have the same stack trace but +// different (or no) reporters get aggregated separately. +void Foo(int aSeven) +{ + char* a[6]; + for (int i = 0; i < aSeven - 1; i++) { + a[i] = (char*) malloc(128 - 16*i); + } + + // Oddly, some versions of clang will cause identical stack traces to be + // generated for adjacent calls to Report(), which breaks the test. Inserting + // the UseItOrLoseIt() calls in between is enough to prevent this. + + Report(a[2]); // reported + + UseItOrLoseIt(a[2], aSeven); + + for (int i = 0; i < aSeven - 5; i++) { + Report(a[i]); // reported + } + + UseItOrLoseIt(a[2], aSeven); + + Report(a[3]); // reported + + // a[4], a[5] unreported +} + +void +RunTests() +{ + // These files are written to $CWD. + auto f1 = MakeUnique("full-empty.json"); + auto f2 = MakeUnique("full-unsampled1.json"); + auto f3 = MakeUnique("full-unsampled2.json"); + auto f4 = MakeUnique("full-sampled.json"); + + // This test relies on the compiler not doing various optimizations, such as + // eliding unused malloc() calls or unrolling loops with fixed iteration + // counts. So we compile it with -O0 (or equivalent), which probably prevents + // that. We also use the following variable for various loop iteration + // counts, just in case compilers might unroll very small loops even with + // -O0. + int seven = 7; + + // Make sure that DMD is actually running; it is initialized on the first + // allocation. + int *x = (int*)malloc(100); + UseItOrLoseIt(x, seven); + MOZ_RELEASE_ASSERT(IsRunning()); + + // The first part of this test requires sampling to be disabled. + SetSampleBelowSize(1); + + // The file manipulations above may have done some heap allocations. + // Clear all knowledge of existing blocks to give us a clean slate. + ClearBlocks(); + + //--------- + + // AnalyzeReports 1. Zero for everything. + JSONWriter writer1(Move(f1)); + AnalyzeReports(writer1); + + //--------- + + // AnalyzeReports 2: 1 freed, 9 out of 10 unreported. + // AnalyzeReports 3: still present and unreported. + int i; + char* a = nullptr; + for (i = 0; i < seven + 3; i++) { + a = (char*) malloc(100); + UseItOrLoseIt(a, seven); + } + free(a); + + // Note: 8 bytes is the smallest requested size that gives consistent + // behaviour across all platforms with jemalloc. + // AnalyzeReports 2: reported. + // AnalyzeReports 3: thrice-reported. + char* a2 = (char*) malloc(8); + Report(a2); + + // AnalyzeReports 2: reported. + // AnalyzeReports 3: reportedness carries over, due to ReportOnAlloc. + char* b = (char*) malloc(10); + ReportOnAlloc(b); + + // ReportOnAlloc, then freed. + // AnalyzeReports 2: freed, irrelevant. + // AnalyzeReports 3: freed, irrelevant. + char* b2 = (char*) malloc(1); + ReportOnAlloc(b2); + free(b2); + + // AnalyzeReports 2: reported 4 times. + // AnalyzeReports 3: freed, irrelevant. + char* c = (char*) calloc(10, 3); + Report(c); + for (int i = 0; i < seven - 4; i++) { + Report(c); + } + + // AnalyzeReports 2: ignored. + // AnalyzeReports 3: irrelevant. + Report((void*)(intptr_t)i); + + // jemalloc rounds this up to 8192. + // AnalyzeReports 2: reported. + // AnalyzeReports 3: freed. + char* e = (char*) malloc(4096); + e = (char*) realloc(e, 4097); + Report(e); + + // First realloc is like malloc; second realloc is shrinking. + // AnalyzeReports 2: reported. + // AnalyzeReports 3: re-reported. + char* e2 = (char*) realloc(nullptr, 1024); + e2 = (char*) realloc(e2, 512); + Report(e2); + + // First realloc is like malloc; second realloc creates a min-sized block. + // XXX: on Windows, second realloc frees the block. + // AnalyzeReports 2: reported. + // AnalyzeReports 3: freed, irrelevant. + char* e3 = (char*) realloc(nullptr, 1023); +//e3 = (char*) realloc(e3, 0); + MOZ_ASSERT(e3); + Report(e3); + + // AnalyzeReports 2: freed, irrelevant. + // AnalyzeReports 3: freed, irrelevant. + char* f = (char*) malloc(64); + free(f); + + // AnalyzeReports 2: ignored. + // AnalyzeReports 3: irrelevant. + Report((void*)(intptr_t)0x0); + + // AnalyzeReports 2: mixture of reported and unreported. + // AnalyzeReports 3: all unreported. + Foo(seven); + + // AnalyzeReports 2: twice-reported. + // AnalyzeReports 3: twice-reported. + char* g1 = (char*) malloc(77); + ReportOnAlloc(g1); + ReportOnAlloc(g1); + + // AnalyzeReports 2: mixture of reported and unreported. + // AnalyzeReports 3: all unreported. + // Nb: this Foo() call is deliberately not adjacent to the previous one. See + // the comment about adjacent calls in Foo() for more details. + Foo(seven); + + // AnalyzeReports 2: twice-reported. + // AnalyzeReports 3: once-reported. + char* g2 = (char*) malloc(78); + Report(g2); + ReportOnAlloc(g2); + + // AnalyzeReports 2: twice-reported. + // AnalyzeReports 3: once-reported. + char* g3 = (char*) malloc(79); + ReportOnAlloc(g3); + Report(g3); + + // All the odd-ball ones. + // AnalyzeReports 2: all unreported. + // AnalyzeReports 3: all freed, irrelevant. + // XXX: no memalign on Mac +//void* w = memalign(64, 65); // rounds up to 128 +//UseItOrLoseIt(w, seven); + + // XXX: posix_memalign doesn't work on B2G +//void* x; +//posix_memalign(&y, 128, 129); // rounds up to 256 +//UseItOrLoseIt(x, seven); + + // XXX: valloc doesn't work on Windows. +//void* y = valloc(1); // rounds up to 4096 +//UseItOrLoseIt(y, seven); + + // XXX: C11 only +//void* z = aligned_alloc(64, 256); +//UseItOrLoseIt(z, seven); + + // AnalyzeReports 2. + JSONWriter writer2(Move(f2)); + AnalyzeReports(writer2); + + //--------- + + Report(a2); + Report(a2); + free(c); + free(e); + Report(e2); + free(e3); +//free(w); +//free(x); +//free(y); +//free(z); + + // AnalyzeReports 3. + JSONWriter writer3(Move(f3)); + AnalyzeReports(writer3); + + //--------- + + // The first part of this test requires sampling to be disabled. + SetSampleBelowSize(128); + + // Clear all knowledge of existing blocks to give us a clean slate. + ClearBlocks(); + + char* s; + + // This equals the sample size, and so is reported exactly. It should be + // listed before records of the same size that are sampled. + s = (char*) malloc(128); + UseItOrLoseIt(s, seven); + + // This exceeds the sample size, and so is reported exactly. + s = (char*) malloc(144); + UseItOrLoseIt(s, seven); + + // These together constitute exactly one sample. + for (int i = 0; i < seven + 9; i++) { + s = (char*) malloc(8); + UseItOrLoseIt(s, seven); + } + + // These fall 8 bytes short of a full sample. + for (int i = 0; i < seven + 8; i++) { + s = (char*) malloc(8); + UseItOrLoseIt(s, seven); + } + + // This exceeds the sample size, and so is recorded exactly. + s = (char*) malloc(256); + UseItOrLoseIt(s, seven); + + // This gets more than to a full sample from the |i < seven + 8| loop above. + s = (char*) malloc(96); + UseItOrLoseIt(s, seven); + + // This gets to another full sample. + for (int i = 0; i < seven - 2; i++) { + s = (char*) malloc(8); + UseItOrLoseIt(s, seven); + } + + // This allocates 16, 32, ..., 128 bytes, which results in a heap block + // record that contains a mix of sample and non-sampled blocks, and so should + // be printed with '~' signs. + for (int i = 1; i <= seven + 1; i++) { + s = (char*) malloc(i * 16); + UseItOrLoseIt(s, seven); + } + + // At the end we're 64 bytes into the current sample so we report ~1,424 + // bytes of allocation overall, which is 64 less than the real value 1,488. + + // AnalyzeReports 4. + JSONWriter writer4(Move(f4)); + AnalyzeReports(writer4); +} + +int main() +{ + RunTests(); + + return 0; +} diff --git a/memory/replace/dmd/test/full-heap-empty-expected.txt b/memory/replace/dmd/test/full-heap-empty-expected.txt index f189bc1bae2..50add864a0c 100644 --- a/memory/replace/dmd/test/full-heap-empty-expected.txt +++ b/memory/replace/dmd/test/full-heap-empty-expected.txt @@ -1,7 +1,7 @@ #----------------------------------------------------------------- Invocation { - $DMD = '--mode=test' + $DMD = '1' Sample-below size = 1 } diff --git a/memory/replace/dmd/test/full-heap-sampled-expected.txt b/memory/replace/dmd/test/full-heap-sampled-expected.txt index ec7fc6baf05..fe840014026 100644 --- a/memory/replace/dmd/test/full-heap-sampled-expected.txt +++ b/memory/replace/dmd/test/full-heap-sampled-expected.txt @@ -1,7 +1,7 @@ #----------------------------------------------------------------- Invocation { - $DMD = '--mode=test' + $DMD = '1' Sample-below size = 128 } diff --git a/memory/replace/dmd/test/full-heap-unsampled1-expected.txt b/memory/replace/dmd/test/full-heap-unsampled1-expected.txt index 16f65c56e96..04debedf199 100644 --- a/memory/replace/dmd/test/full-heap-unsampled1-expected.txt +++ b/memory/replace/dmd/test/full-heap-unsampled1-expected.txt @@ -1,7 +1,7 @@ #----------------------------------------------------------------- Invocation { - $DMD = '--mode=test' + $DMD = '1' Sample-below size = 1 } diff --git a/memory/replace/dmd/test/full-heap-unsampled2-expected.txt b/memory/replace/dmd/test/full-heap-unsampled2-expected.txt index 49a329f32f6..eea22c90fd1 100644 --- a/memory/replace/dmd/test/full-heap-unsampled2-expected.txt +++ b/memory/replace/dmd/test/full-heap-unsampled2-expected.txt @@ -1,7 +1,7 @@ #----------------------------------------------------------------- Invocation { - $DMD = '--mode=test' + $DMD = '1' Sample-below size = 1 } diff --git a/memory/replace/dmd/test/full-reports-empty-expected.txt b/memory/replace/dmd/test/full-reports-empty-expected.txt index 2247b9b5a56..231c6911d02 100644 --- a/memory/replace/dmd/test/full-reports-empty-expected.txt +++ b/memory/replace/dmd/test/full-reports-empty-expected.txt @@ -1,7 +1,7 @@ #----------------------------------------------------------------- Invocation { - $DMD = '--mode=test' + $DMD = '1' Sample-below size = 1 } diff --git a/memory/replace/dmd/test/full-reports-sampled-expected.txt b/memory/replace/dmd/test/full-reports-sampled-expected.txt index 3a7878e60ab..2d96828d828 100644 --- a/memory/replace/dmd/test/full-reports-sampled-expected.txt +++ b/memory/replace/dmd/test/full-reports-sampled-expected.txt @@ -1,7 +1,7 @@ #----------------------------------------------------------------- Invocation { - $DMD = '--mode=test' + $DMD = '1' Sample-below size = 128 } diff --git a/memory/replace/dmd/test/full-reports-unsampled1-expected.txt b/memory/replace/dmd/test/full-reports-unsampled1-expected.txt index e5c16817cab..28b8f166e9a 100644 --- a/memory/replace/dmd/test/full-reports-unsampled1-expected.txt +++ b/memory/replace/dmd/test/full-reports-unsampled1-expected.txt @@ -1,7 +1,7 @@ #----------------------------------------------------------------- Invocation { - $DMD = '--mode=test' + $DMD = '1' Sample-below size = 1 } diff --git a/memory/replace/dmd/test/full-reports-unsampled2-expected.txt b/memory/replace/dmd/test/full-reports-unsampled2-expected.txt index 7457aa3d473..a18aa5f69e6 100644 --- a/memory/replace/dmd/test/full-reports-unsampled2-expected.txt +++ b/memory/replace/dmd/test/full-reports-unsampled2-expected.txt @@ -1,7 +1,7 @@ #----------------------------------------------------------------- Invocation { - $DMD = '--mode=test' + $DMD = '1' Sample-below size = 1 } diff --git a/memory/replace/dmd/test/moz.build b/memory/replace/dmd/test/moz.build new file mode 100644 index 00000000000..8b253a5685c --- /dev/null +++ b/memory/replace/dmd/test/moz.build @@ -0,0 +1,26 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +SimplePrograms([ + 'SmokeDMD', +]) + +# See the comment at the top of SmokeDMD.cpp:RunTests(). +if CONFIG['OS_ARCH'] == 'WINNT': + CXXFLAGS += ['-Og-'] +else: + CXXFLAGS += ['-O0'] + +DEFINES['MOZ_NO_MOZALLOC'] = True + +DISABLE_STL_WRAPPING = True + +USE_LIBS += ['dmd'] + +XPCSHELL_TESTS_MANIFESTS += [ + 'xpcshell.ini', +] + diff --git a/memory/replace/dmd/test/test_dmd.js b/memory/replace/dmd/test/test_dmd.js index 4fd06554c3a..9e71c8b8eab 100644 --- a/memory/replace/dmd/test/test_dmd.js +++ b/memory/replace/dmd/test/test_dmd.js @@ -15,16 +15,54 @@ let gEnv = Cc["@mozilla.org/process/environment;1"] .getService(Ci.nsIEnvironment); let gPythonName = gEnv.get("PYTHON"); -// If we're testing locally, the script is in "CurProcD". Otherwise, it is in -// another location that we have to find. -let gDmdScriptFile = FileUtils.getFile("CurProcD", ["dmd.py"]); -if (!gDmdScriptFile.exists()) { - gDmdScriptFile = FileUtils.getFile("CurWorkD", []); - while (gDmdScriptFile.path.contains("xpcshell")) { - gDmdScriptFile = gDmdScriptFile.parent; +// If we're testing locally, the executable file is in "CurProcD". Otherwise, +// it is in another location that we have to find. +function getExecutable(aFilename) { + let file = FileUtils.getFile("CurProcD", [aFilename]); + if (!file.exists()) { + file = FileUtils.getFile("CurWorkD", []); + while (file.path.contains("xpcshell")) { + file = file.parent; + } + file.append("bin"); + file.append(aFilename); } - gDmdScriptFile.append("bin"); - gDmdScriptFile.append("dmd.py"); + return file; +} + +let gIsWindows = Cc["@mozilla.org/xre/app-info;1"] + .getService(Ci.nsIXULRuntime).OS === "WINNT"; +let gDmdTestFile = getExecutable("SmokeDMD" + (gIsWindows ? ".exe" : "")); + +let gDmdScriptFile = getExecutable("dmd.py"); + +function readFile(aFile) { + var fstream = Cc["@mozilla.org/network/file-input-stream;1"] + .createInstance(Ci.nsIFileInputStream); + var cstream = Cc["@mozilla.org/intl/converter-input-stream;1"] + .createInstance(Ci.nsIConverterInputStream); + fstream.init(aFile, -1, 0, 0); + cstream.init(fstream, "UTF-8", 0, 0); + + var data = ""; + let (str = {}) { + let read = 0; + do { + // Read as much as we can and put it in str.value. + read = cstream.readString(0xffffffff, str); + data += str.value; + } while (read != 0); + } + cstream.close(); // this closes fstream + return data.replace(/\r/g, ""); // normalize line endings +} + +function runProcess(aExeFile, aArgs) { + let process = Cc["@mozilla.org/process/util;1"] + .createInstance(Components.interfaces.nsIProcess); + process.init(aExeFile); + process.run(/* blocking = */true, aArgs, aArgs.length); + return process.exitValue; } function test(aJsonFile, aPrefix, aOptions) { @@ -35,11 +73,6 @@ function test(aJsonFile, aPrefix, aOptions) { // Run dmd.py on the JSON file, producing |actualFile|. - let pythonFile = new FileUtils.File(gPythonName); - let pythonProcess = Cc["@mozilla.org/process/util;1"] - .createInstance(Components.interfaces.nsIProcess); - pythonProcess.init(pythonFile); - let args = [ gDmdScriptFile.path, "--filter-stacks-for-testing", @@ -48,20 +81,35 @@ function test(aJsonFile, aPrefix, aOptions) { args = args.concat(aOptions); args.push(aJsonFile.path); - pythonProcess.run(/* blocking = */true, args, args.length); + runProcess(new FileUtils.File(gPythonName), args); - // Compare |expectedFile| with |actualFile|. Difference are printed to - // stdout. + // Compare |expectedFile| with |actualFile|. We produce nice diffs with + // /usr/bin/diff on systems that have it (Mac and Linux). Otherwise (Windows) + // we do a string compare of the file contents and then print them both if + // they don't match. - let diffFile = new FileUtils.File("/usr/bin/diff"); - let diffProcess = Cc["@mozilla.org/process/util;1"] - .createInstance(Components.interfaces.nsIProcess); - // XXX: this doesn't work on Windows (bug 1076446). - diffProcess.init(diffFile); + let success; + try { + let rv = runProcess(new FileUtils.File("/usr/bin/diff"), + ["-u", expectedFile.path, actualFile.path]); + success = rv == 0; + + } catch (e) { + let expectedData = readFile(expectedFile); + let actualData = readFile(actualFile); + success = expectedData === actualData; + if (!success) { + expectedData = expectedData.split("\n"); + actualData = actualData.split("\n"); + for (let i = 0; i < expectedData.length; i++) { + print("EXPECTED:" + expectedData[i]); + } + for (let i = 0; i < actualData.length; i++) { + print(" ACTUAL:" + actualData[i]); + } + } + } - args = ["-u", expectedFile.path, actualFile.path]; - diffProcess.run(/* blocking = */true, args, args.length); - let success = diffProcess.exitValue == 0; ok(success, aPrefix); actualFile.remove(true); @@ -72,12 +120,16 @@ function run_test() { // These tests do full end-to-end testing of DMD, i.e. both the C++ code that // generates the JSON output, and the script that post-processes that output. - // The test relies on DMD's test mode executing beforehand, in order to - // produce the relevant JSON files. // // Run these synchronously, because test() updates the full*.json files // in-place (to fix stacks) when it runs dmd.py, and that's not safe to do // asynchronously. + + gEnv.set("DMD", "1"); + gEnv.set(gEnv.get("DMD_PRELOAD_VAR"), gEnv.get("DMD_PRELOAD_VALUE")); + + runProcess(gDmdTestFile, []); + let fullTestNames = ["empty", "unsampled1", "unsampled2", "sampled"]; for (let i = 0; i < fullTestNames.length; i++) { let name = fullTestNames[i]; diff --git a/memory/replace/dmd/test/xpcshell.ini b/memory/replace/dmd/test/xpcshell.ini index b9f63122756..143cd18d90e 100644 --- a/memory/replace/dmd/test/xpcshell.ini +++ b/memory/replace/dmd/test/xpcshell.ini @@ -22,7 +22,8 @@ support-files = script-show-all-block-sizes-expected.txt # Bug 1077230 explains why this test is disabled on Mac 10.6. -# Bug 1076446 is open for getting this test working on on Windows. +# Bug 1076446 comment 20 explains why this test is only enabled on Windows 5.1 +# (WinXP) and 6.1 (Win7), but not 6.2 (Win8). [test_dmd.js] dmd = true -run-if = os == 'linux' || os == 'mac' && os_version != '10.6' +run-if = os == 'linux' || os == 'mac' && os_version != '10.6' || os == 'win' && (os_version == '5.1' || os_version == '6.1') diff --git a/python/mozbuild/mozbuild/mach_commands.py b/python/mozbuild/mozbuild/mach_commands.py index 77cdf54be77..057c4b56b71 100644 --- a/python/mozbuild/mozbuild/mach_commands.py +++ b/python/mozbuild/mozbuild/mach_commands.py @@ -828,11 +828,9 @@ class RunProgram(MachCommandBase): help='The maximum depth of stack traces. The default and maximum is 24.') @CommandArgument('--show-dump-stats', action='store_true', group='DMD', help='Show stats when doing dumps.') - @CommandArgument('--mode', choices=['normal', 'test'], group='DMD', - help='Mode of operation. The default is normal.') def run(self, params, remote, background, noprofile, debug, debugger, debugparams, slowscript, dmd, sample_below, max_frames, - show_dump_stats, mode): + show_dump_stats): try: binpath = self.get_binary_path('app') @@ -902,8 +900,6 @@ class RunProgram(MachCommandBase): dmd_params.append('--max-frames=' + max_frames) if show_dump_stats: dmd_params.append('--show-dump-stats=yes') - if mode: - dmd_params.append('--mode=' + mode) if dmd_params: dmd_env_var = " ".join(dmd_params) diff --git a/testing/mochitest/Makefile.in b/testing/mochitest/Makefile.in index b28e8ebb0e0..3874f8beff9 100644 --- a/testing/mochitest/Makefile.in +++ b/testing/mochitest/Makefile.in @@ -63,7 +63,10 @@ endif endif ifdef MOZ_DMD -TEST_HARNESS_BINS += dmd.py +TEST_HARNESS_BINS += \ + dmd.py \ + SmokeDMD$(BIN_SUFFIX) \ + $(NULL) endif # Components / typelibs that don't get packaged with diff --git a/testing/xpcshell/runxpcshelltests.py b/testing/xpcshell/runxpcshelltests.py index a4b963538a4..bf65c0f472a 100755 --- a/testing/xpcshell/runxpcshelltests.py +++ b/testing/xpcshell/runxpcshelltests.py @@ -620,10 +620,10 @@ class XPCShellTestThread(Thread): preloadEnvVar = 'MOZ_REPLACE_MALLOC_LIB' libdmd = os.path.join(self.xrePath, 'dmd.dll') - self.env['DMD'] = '--mode=test' self.env['PYTHON'] = sys.executable self.env['BREAKPAD_SYMBOLS_PATH'] = self.symbolsPath - self.env[preloadEnvVar] = libdmd + self.env['DMD_PRELOAD_VAR'] = preloadEnvVar + self.env['DMD_PRELOAD_VALUE'] = libdmd testTimeoutInterval = HARNESS_TIMEOUT # Allow a test to request a multiple of the timeout if it is expected to take long diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk index 9d9db2f9a38..75f80837b21 100644 --- a/toolkit/mozapps/installer/packager.mk +++ b/toolkit/mozapps/installer/packager.mk @@ -596,8 +596,11 @@ NO_PKG_FILES += \ # If a manifest has not been supplied, the following # files should be excluded from the package too ifndef MOZ_PKG_MANIFEST -NO_PKG_FILES += \ - ssltunnel* +NO_PKG_FILES += ssltunnel* +endif + +ifdef MOZ_DMD +NO_PKG_FILES += SmokeDMD endif # browser/locales/Makefile uses this makefile for its variable defs, but From 755b93f87d5dab74b56558af4b7d5608ceb854bd Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 16 Oct 2014 19:06:45 -0700 Subject: [PATCH 06/52] Bug 1014343 (attempt 2) - Add diff support to dmd.py. r=mccr8. --- memory/replace/dmd/dmd.py | 330 ++++++++++++++---- .../dmd/test/script-diff-basic-expected.txt | 109 ++++++ .../dmd/test/script-diff-options-expected.txt | 80 +++++ memory/replace/dmd/test/script-diff1.json | 62 ++++ memory/replace/dmd/test/script-diff2.json | 66 ++++ memory/replace/dmd/test/test_dmd.js | 56 +-- memory/replace/dmd/test/xpcshell.ini | 4 + 7 files changed, 612 insertions(+), 95 deletions(-) create mode 100644 memory/replace/dmd/test/script-diff-basic-expected.txt create mode 100644 memory/replace/dmd/test/script-diff-options-expected.txt create mode 100644 memory/replace/dmd/test/script-diff1.json create mode 100644 memory/replace/dmd/test/script-diff2.json diff --git a/memory/replace/dmd/dmd.py b/memory/replace/dmd/dmd.py index 325d27ca78b..036d60dc254 100755 --- a/memory/replace/dmd/dmd.py +++ b/memory/replace/dmd/dmd.py @@ -58,14 +58,73 @@ allocatorFns = [ ] class Record(object): + '''A record is an aggregation of heap blocks that have identical stack + traces. It can also be used to represent the difference between two + records.''' + def __init__(self): self.numBlocks = 0 self.reqSize = 0 self.slopSize = 0 self.usableSize = 0 self.isSampled = False + self.allocatedAtDesc = None + self.reportedAtDescs = [] self.usableSizes = collections.defaultdict(int) + def isZero(self, args): + return self.numBlocks == 0 and \ + self.reqSize == 0 and \ + self.slopSize == 0 and \ + self.usableSize == 0 and \ + (not args.show_all_block_sizes or len(self.usableSizes) == 0) + + def negate(self): + self.numBlocks = -self.numBlocks + self.reqSize = -self.reqSize + self.slopSize = -self.slopSize + self.usableSize = -self.usableSize + + negatedUsableSizes = collections.defaultdict(int) + for (usableSize, isSampled), count in self.usableSizes.items(): + negatedUsableSizes[(-usableSize, isSampled)] = count + self.usableSizes = negatedUsableSizes + + def subtract(self, r): + # We should only be calling this on records with matching stack traces. + # Check this. + assert self.allocatedAtDesc == r.allocatedAtDesc + assert self.reportedAtDescs == r.reportedAtDescs + + self.numBlocks -= r.numBlocks + self.reqSize -= r.reqSize + self.slopSize -= r.slopSize + self.usableSize -= r.usableSize + self.isSampled = self.isSampled or r.isSampled + + usableSizes1 = self.usableSizes + usableSizes2 = r.usableSizes + usableSizes3 = collections.defaultdict(int) + for usableSize, isSampled in usableSizes1: + counts1 = usableSizes1[usableSize, isSampled] + if (usableSize, isSampled) in usableSizes2: + counts2 = usableSizes2[usableSize, isSampled] + del usableSizes2[usableSize, isSampled] + counts3 = counts1 - counts2 + if counts3 != 0: + if counts3 < 0: + usableSize = -usableSize + counts3 = -counts3 + usableSizes3[usableSize, isSampled] = counts3 + else: + usableSizes3[usableSize, isSampled] = counts1 + + for usableSize, isSampled in usableSizes2: + usableSizes3[-usableSize, isSampled] = \ + usableSizes2[usableSize, isSampled] + + self.usableSizes = usableSizes3 + @staticmethod def cmpByIsSampled(r1, r2): # Treat sampled as smaller than non-sampled. @@ -74,17 +133,20 @@ class Record(object): @staticmethod def cmpByUsableSize(r1, r2): # Sort by usable size, then req size, then by isSampled. - return cmp(r1.usableSize, r2.usableSize) or Record.cmpByReqSize(r1, r2) + return cmp(abs(r1.usableSize), abs(r2.usableSize)) or \ + Record.cmpByReqSize(r1, r2) @staticmethod def cmpByReqSize(r1, r2): # Sort by req size, then by isSampled. - return cmp(r1.reqSize, r2.reqSize) or Record.cmpByIsSampled(r1, r2) + return cmp(abs(r1.reqSize), abs(r2.reqSize)) or \ + Record.cmpByIsSampled(r1, r2) @staticmethod def cmpBySlopSize(r1, r2): # Sort by slop size, then by isSampled. - return cmp(r1.slopSize, r2.slopSize) or Record.cmpByIsSampled(r1, r2) + return cmp(abs(r1.slopSize), abs(r2.slopSize)) or \ + Record.cmpByIsSampled(r1, r2) sortByChoices = { @@ -105,7 +167,9 @@ def parseCommandLine(): description = ''' Analyze heap data produced by DMD. -If no files are specified, read from stdin; input can be gzipped. +If one file is specified, analyze it; if two files are specified, analyze the +difference. +Input files can be gzipped. Write to stdout unless -o/--output is specified. Stack traces are fixed to show function names, filenames and line numbers unless --no-fix-stacks is specified; stack fixing modifies the original file @@ -140,7 +204,11 @@ variable is used to find breakpad symbols for stack fixing. p.add_argument('--filter-stacks-for-testing', action='store_true', help='filter stack traces; only useful for testing purposes') - p.add_argument('input_file') + p.add_argument('input_file', + help='a file produced by DMD') + + p.add_argument('input_file2', nargs='?', + help='a file produced by DMD; if present, it is diff\'d with input_file') return p.parse_args(sys.argv[1:]) @@ -195,18 +263,16 @@ def fixStackTraces(inputFilename, isZipped, opener): shutil.move(tmpFilename, inputFilename) -def main(): - args = parseCommandLine() - +def getDigestFromFile(args, inputFile): # Handle gzipped input if necessary. - isZipped = args.input_file.endswith('.gz') + isZipped = inputFile.endswith('.gz') opener = gzip.open if isZipped else open # Fix stack traces unless otherwise instructed. if not args.no_fix_stacks: - fixStackTraces(args.input_file, isZipped, opener) + fixStackTraces(inputFile, isZipped, opener) - with opener(args.input_file, 'rb') as f: + with opener(inputFile, 'rb') as f: j = json.load(f) if j['version'] != outputVersion: @@ -245,6 +311,31 @@ def main(): if len(frameKeys) > args.max_frames: traceTable[traceKey] = frameKeys[:args.max_frames] + def buildTraceDescription(traceTable, frameTable, traceKey): + frameKeys = traceTable[traceKey] + fmt = ' #{:02d}{:}' + + if args.filter_stacks_for_testing: + # When running SmokeDMD.cpp, every stack trace should contain at + # least one frame that contains 'DMD.cpp', from either |DMD.cpp| or + # |SmokeDMD.cpp|. (Or 'dmd.cpp' on Windows.) If we see such a + # frame, we replace the entire stack trace with a single, + # predictable frame. There is too much variation in the stack + # traces across different machines and platforms to do more precise + # matching, but this level of matching will result in failure if + # stack fixing fails completely. + for frameKey in frameKeys: + frameDesc = frameTable[frameKey] + if 'DMD.cpp' in frameDesc or 'dmd.cpp' in frameDesc: + return [fmt.format(1, ': ... DMD.cpp ...')] + + # The frame number is always '#00' (see DMD.h for why), so we have to + # replace that with the correct frame number. + desc = [] + for n, frameKey in enumerate(traceTable[traceKey], start=1): + desc.append(fmt.format(n, frameTable[frameKey][3:])) + return desc + # Aggregate blocks into records. All sufficiently similar blocks go into a # single record. @@ -264,24 +355,33 @@ def main(): # derived from the block's 'alloc' and 'reps' (if present) stack # traces. # - # Each stack trace has a key in the JSON file. But we don't use that - # key to construct |recordKey|; instead we use the frame keys. - # This is because the stack trimming done for --max-frames can cause - # stack traces with distinct trace keys to end up with the same frame - # keys, and these should be considered equivalent. E.g. if we have - # distinct traces T1:[A,B,C] and T2:[A,B,D] and we trim the final frame - # of each they should be considered equivalent. - allocatedAt = block['alloc'] + # We use frame descriptions (e.g. "#00: foo (X.cpp:99)") when comparing + # traces for equality. We can't use trace keys or frame keys because + # they're not comparable across different DMD runs (which is relevant + # when doing diffs). + # + # Using frame descriptions also fits in with the stack trimming done + # for --max-frames, which requires that stack traces with common + # beginnings but different endings to be considered equivalent. E.g. if + # we have distinct traces T1:[A:D1,B:D2,C:D3] and T2:[X:D1,Y:D2,Z:D4] + # and we trim the final frame of each they should be considered + # equivalent because the untrimmed frame descriptions (D1 and D2) + # match. + def makeRecordKeyPart(traceKey): + return str(map(lambda frameKey: frameTable[frameKey], + traceTable[traceKey])) + + allocatedAtTraceKey = block['alloc'] if args.ignore_reports: - recordKey = str(traceTable[allocatedAt]) + recordKey = makeRecordKeyPart(allocatedAtTraceKey) records = liveRecords else: - recordKey = str(traceTable[allocatedAt]) + recordKey = makeRecordKeyPart(allocatedAtTraceKey) if 'reps' in block: - reportedAts = block['reps'] - for reportedAt in reportedAts: - recordKey += str(traceTable[reportedAt]) - if len(reportedAts) == 1: + reportedAtTraceKeys = block['reps'] + for reportedAtTraceKey in reportedAtTraceKeys: + recordKey += makeRecordKeyPart(reportedAtTraceKey) + if len(reportedAtTraceKeys) == 1: records = onceReportedRecords else: records = twiceReportedRecords @@ -312,15 +412,92 @@ def main(): record.slopSize += slopSize record.usableSize += usableSize record.isSampled = record.isSampled or isSampled - record.allocatedAt = block['alloc'] + if record.allocatedAtDesc == None: + record.allocatedAtDesc = \ + buildTraceDescription(traceTable, frameTable, + allocatedAtTraceKey) + if args.ignore_reports: pass else: - if 'reps' in block: - record.reportedAts = block['reps'] + if 'reps' in block and record.reportedAtDescs == []: + f = lambda k: buildTraceDescription(traceTable, frameTable, k) + record.reportedAtDescs = map(f, reportedAtTraceKeys) record.usableSizes[(usableSize, isSampled)] += 1 - # Print records. + # All the processed data for a single DMD file is called a "digest". + digest = {} + digest['dmdEnvVar'] = dmdEnvVar + digest['sampleBelowSize'] = sampleBelowSize + digest['heapUsableSize'] = heapUsableSize + digest['heapBlocks'] = heapBlocks + digest['heapIsSampled'] = heapIsSampled + if args.ignore_reports: + digest['liveRecords'] = liveRecords + else: + digest['unreportedRecords'] = unreportedRecords + digest['onceReportedRecords'] = onceReportedRecords + digest['twiceReportedRecords'] = twiceReportedRecords + return digest + + +def diffRecords(args, records1, records2): + records3 = {} + + # Process records1. + for k in records1: + r1 = records1[k] + if k in records2: + # This record is present in both records1 and records2. + r2 = records2[k] + del records2[k] + r2.subtract(r1) + if not r2.isZero(args): + records3[k] = r2 + else: + # This record is present only in records1. + r1.negate() + records3[k] = r1 + + for k in records2: + # This record is present only in records2. + records3[k] = records2[k] + + return records3 + + +def diffDigests(args, d1, d2): + d3 = {} + d3['dmdEnvVar'] = (d1['dmdEnvVar'], d2['dmdEnvVar']) + d3['sampleBelowSize'] = (d1['sampleBelowSize'], d2['sampleBelowSize']) + d3['heapUsableSize'] = d2['heapUsableSize'] - d1['heapUsableSize'] + d3['heapBlocks'] = d2['heapBlocks'] - d1['heapBlocks'] + d3['heapIsSampled'] = d2['heapIsSampled'] or d1['heapIsSampled'] + if args.ignore_reports: + d3['liveRecords'] = diffRecords(args, d1['liveRecords'], + d2['liveRecords']) + else: + d3['unreportedRecords'] = diffRecords(args, d1['unreportedRecords'], + d2['unreportedRecords']) + d3['onceReportedRecords'] = diffRecords(args, d1['onceReportedRecords'], + d2['onceReportedRecords']) + d3['twiceReportedRecords'] = diffRecords(args, d1['twiceReportedRecords'], + d2['twiceReportedRecords']) + return d3 + + +def printDigest(args, digest): + dmdEnvVar = digest['dmdEnvVar'] + sampleBelowSize = digest['sampleBelowSize'] + heapUsableSize = digest['heapUsableSize'] + heapIsSampled = digest['heapIsSampled'] + heapBlocks = digest['heapBlocks'] + if args.ignore_reports: + liveRecords = digest['liveRecords'] + else: + unreportedRecords = digest['unreportedRecords'] + onceReportedRecords = digest['onceReportedRecords'] + twiceReportedRecords = digest['twiceReportedRecords'] separator = '#' + '-' * 65 + '\n' @@ -339,29 +516,9 @@ def main(): def out(*arguments, **kwargs): print(*arguments, file=args.output, **kwargs) - def printStack(traceTable, frameTable, traceKey): - frameKeys = traceTable[traceKey] - fmt = ' #{:02d}{:}' - - if args.filter_stacks_for_testing: - # When running SmokeDMD.cpp, every stack trace should contain at - # least one frame that contains 'DMD.cpp', from either |DMD.cpp| or - # |SmokeDMD.cpp|. (Or 'dmd.cpp' on Windows.) If we see such a - # frame, we replace the entire stack trace with a single, - # predictable frame. There is too much variation in the stack - # traces across different machines and platforms to do more precise - # matching, but this level of matching will result in failure if - # stack fixing fails completely. - for frameKey in frameKeys: - frameDesc = frameTable[frameKey] - if 'DMD.cpp' in frameDesc or 'dmd.cpp' in frameDesc: - out(fmt.format(1, ': ... DMD.cpp ...')) - return - - # The frame number is always '#00' (see DMD.h for why), so we have to - # replace that with the correct frame number. - for n, frameKey in enumerate(traceTable[traceKey], start=1): - out(fmt.format(n, frameTable[frameKey][3:])) + def printStack(traceDesc): + for frameDesc in traceDesc: + out(frameDesc) def printRecords(recordKind, records, heapUsableSize): RecordKind = recordKind.capitalize() @@ -414,42 +571,55 @@ def main(): perc(kindCumulativeUsableSize, kindUsableSize))) if args.show_all_block_sizes: - usableSizes = sorted(record.usableSizes.items(), reverse=True) + abscmp = lambda ((usableSize1, _1a), _1b), \ + ((usableSize2, _2a), _2b): \ + cmp(abs(usableSize1), abs(usableSize2)) + usableSizes = sorted(record.usableSizes.items(), cmp=abscmp, + reverse=True) out(' Individual block sizes: ', end='') - isFirst = True - for (usableSize, isSampled), count in usableSizes: - if not isFirst: - out('; ', end='') - out('{:}'.format(number(usableSize, isSampled)), end='') - if count > 1: - out(' x {:,d}'.format(count), end='') - isFirst = False + if len(usableSizes) == 0: + out('(no change)', end='') + else: + isFirst = True + for (usableSize, isSampled), count in usableSizes: + if not isFirst: + out('; ', end='') + out('{:}'.format(number(usableSize, isSampled)), end='') + if count > 1: + out(' x {:,d}'.format(count), end='') + isFirst = False out() out(' Allocated at {') - printStack(traceTable, frameTable, record.allocatedAt) + printStack(record.allocatedAtDesc) out(' }') if args.ignore_reports: pass else: - if hasattr(record, 'reportedAts'): - for n, reportedAt in enumerate(record.reportedAts): - again = 'again ' if n > 0 else '' - out(' Reported {:}at {{'.format(again)) - printStack(traceTable, frameTable, reportedAt) - out(' }') + for n, reportedAtDesc in enumerate(record.reportedAtDescs): + again = 'again ' if n > 0 else '' + out(' Reported {:}at {{'.format(again)) + printStack(reportedAtDesc) + out(' }') out('}\n') return (kindUsableSize, kindBlocks) - # Print header. + def printInvocation(n, dmdEnvVar, sampleBelowSize): + out('Invocation{:} {{'.format(n)) + out(' $DMD = \'' + dmdEnvVar + '\'') + out(' Sample-below size = ' + str(sampleBelowSize)) + out('}\n') + + # Print invocation(s). out(separator) - out('Invocation {') - out(' $DMD = \'' + dmdEnvVar + '\'') - out(' Sample-below size = ' + str(sampleBelowSize)) - out('}\n') + if type(dmdEnvVar) is not tuple: + printInvocation('', dmdEnvVar, sampleBelowSize) + else: + printInvocation(' 1', dmdEnvVar[0], sampleBelowSize[0]) + printInvocation(' 2', dmdEnvVar[1], sampleBelowSize[1]) # Print records. if args.ignore_reports: @@ -460,10 +630,10 @@ def main(): printRecords('twice-reported', twiceReportedRecords, heapUsableSize) unreportedUsableSize, unreportedBlocks = \ - printRecords('unreported', unreportedRecords, heapUsableSize) + printRecords('unreported', unreportedRecords, heapUsableSize) onceReportedUsableSize, onceReportedBlocks = \ - printRecords('once-reported', onceReportedRecords, heapUsableSize) + printRecords('once-reported', onceReportedRecords, heapUsableSize) # Print summary. out(separator) @@ -501,5 +671,15 @@ def main(): out('}\n') +def main(): + args = parseCommandLine() + digest = getDigestFromFile(args, args.input_file) + if args.input_file2: + digest2 = getDigestFromFile(args, args.input_file2) + digest = diffDigests(args, digest, digest2) + printDigest(args, digest) + + if __name__ == '__main__': main() + diff --git a/memory/replace/dmd/test/script-diff-basic-expected.txt b/memory/replace/dmd/test/script-diff-basic-expected.txt new file mode 100644 index 00000000000..994b025fed7 --- /dev/null +++ b/memory/replace/dmd/test/script-diff-basic-expected.txt @@ -0,0 +1,109 @@ +#----------------------------------------------------------------- + +Invocation 1 { + $DMD = '--sample-below=127' + Sample-below size = 127 +} + +Invocation 2 { + $DMD = '--sample-below=63' + Sample-below size = 63 +} + +#----------------------------------------------------------------- + +Twice-reported { + ~-1 blocks in heap block record 1 of 1 + ~-1,088 bytes (~-1,064 requested / ~-24 slop) + 15.46% of the heap (15.46% cumulative) + 100.00% of twice-reported (100.00% cumulative) + Allocated at { + #01: F (F.cpp:99) + } + Reported at { + #01: R1 (R1.cpp:99) + } + Reported again at { + #01: R2 (R2.cpp:99) + } +} + +#----------------------------------------------------------------- + +Unreported { + 4 blocks in heap block record 1 of 4 + 16,384 bytes (16,384 requested / 0 slop) + -232.76% of the heap (-232.76% cumulative) + 371.01% of unreported (371.01% cumulative) + Allocated at { + #01: E (E.cpp:99) + } +} + +Unreported { + ~7 blocks in heap block record 2 of 4 + ~-11,968 bytes (~-12,016 requested / ~48 slop) + 170.02% of the heap (-62.74% cumulative) + -271.01% of unreported (100.00% cumulative) + Allocated at { + #01: F (F.cpp:99) + } +} + +Unreported { + 0 blocks in heap block record 3 of 4 + 0 bytes (-384 requested / 384 slop) + -0.00% of the heap (-62.74% cumulative) + 0.00% of unreported (100.00% cumulative) + Allocated at { + #01: C (C.cpp:99) + } +} + +Unreported { + -2 blocks in heap block record 4 of 4 + 0 bytes (0 requested / 0 slop) + -0.00% of the heap (-62.74% cumulative) + 0.00% of unreported (100.00% cumulative) + Allocated at { + #01: B (B.cpp:99) + } +} + +#----------------------------------------------------------------- + +Once-reported { + -3 blocks in heap block record 1 of 2 + -10,240 bytes (-10,192 requested / -48 slop) + 145.48% of the heap (145.48% cumulative) + 98.77% of once-reported (98.77% cumulative) + Allocated at { + #01: D (D.cpp:99) + } + Reported at { + #01: R1 (R1.cpp:99) + } +} + +Once-reported { + ~-1 blocks in heap block record 2 of 2 + ~-127 bytes (~-151 requested / ~24 slop) + 1.80% of the heap (147.28% cumulative) + 1.23% of once-reported (100.00% cumulative) + Allocated at { + #01: F (F.cpp:99) + } + Reported at { + #01: R1 (R1.cpp:99) + } +} + +#----------------------------------------------------------------- + +Summary { + Total: ~-7,039 bytes (100.00%) in ~4 blocks (100.00%) + Unreported: ~4,416 bytes (-62.74%) in ~9 blocks (225.00%) + Once-reported: ~-10,367 bytes (147.28%) in ~-4 blocks (-100.00%) + Twice-reported: ~-1,088 bytes ( 15.46%) in ~-1 blocks (-25.00%) +} + diff --git a/memory/replace/dmd/test/script-diff-options-expected.txt b/memory/replace/dmd/test/script-diff-options-expected.txt new file mode 100644 index 00000000000..8b146a2feaf --- /dev/null +++ b/memory/replace/dmd/test/script-diff-options-expected.txt @@ -0,0 +1,80 @@ +#----------------------------------------------------------------- + +Invocation 1 { + $DMD = '--sample-below=127' + Sample-below size = 127 +} + +Invocation 2 { + $DMD = '--sample-below=63' + Sample-below size = 63 +} + +#----------------------------------------------------------------- + +Live { + 4 blocks in heap block record 1 of 6 + 16,384 bytes (16,384 requested / 0 slop) + -232.76% of the heap (-232.76% cumulative) + Individual block sizes: 4,096 x 4 + Allocated at { + #01: E (E.cpp:99) + } +} + +Live { + ~5 blocks in heap block record 2 of 6 + ~-13,183 bytes (~-13,231 requested / ~48 slop) + 187.29% of the heap (-45.48% cumulative) + Individual block sizes: -15,360; 2,048; -1,024; 512 x 2; 128; ~-127 x 3; 64 x 4; ~63 x 2 + Allocated at { + #01: F (F.cpp:99) + } +} + +Live { + -3 blocks in heap block record 3 of 6 + -10,240 bytes (-10,192 requested / -48 slop) + 145.48% of the heap (100.00% cumulative) + Individual block sizes: -4,096 x 2; -2,048 + Allocated at { + #01: D (D.cpp:99) + } +} + +Live { + 0 blocks in heap block record 4 of 6 + 0 bytes (-384 requested / 384 slop) + -0.00% of the heap (100.00% cumulative) + Individual block sizes: (no change) + Allocated at { + #01: C (C.cpp:99) + } +} + +Live { + 0 blocks in heap block record 5 of 6 + 0 bytes (0 requested / 0 slop) + -0.00% of the heap (100.00% cumulative) + Individual block sizes: 20,480; -16,384; -8,192; 4,096 + Allocated at { + #01: G (G.cpp:99) + } +} + +Live { + -2 blocks in heap block record 6 of 6 + 0 bytes (0 requested / 0 slop) + -0.00% of the heap (100.00% cumulative) + Individual block sizes: 8,192 x 2; -4,096 x 4 + Allocated at { + #01: B (B.cpp:99) + } +} + +#----------------------------------------------------------------- + +Summary { + Total: ~-7,039 bytes in ~4 blocks +} + diff --git a/memory/replace/dmd/test/script-diff1.json b/memory/replace/dmd/test/script-diff1.json new file mode 100644 index 00000000000..d22cfa6870a --- /dev/null +++ b/memory/replace/dmd/test/script-diff1.json @@ -0,0 +1,62 @@ +{ + "version": 1, + "invocation": { + "dmdEnvVar": "--sample-below=127", + "sampleBelowSize": 127 + }, + "blockList": [ + {"req": 4096, "alloc": "A"}, + {"req": 4096, "alloc": "A"}, + {"req": 4096, "alloc": "A"}, + {"req": 4096, "alloc": "A"}, + + {"req": 4096, "alloc": "B"}, + {"req": 4096, "alloc": "B"}, + {"req": 4096, "alloc": "B"}, + {"req": 4096, "alloc": "B"}, + + {"req": 4096, "alloc": "C"}, + {"req": 4096, "alloc": "C"}, + {"req": 4096, "alloc": "C"}, + {"req": 4096, "alloc": "C"}, + + {"req": 4096, "alloc": "D", "reps": ["R1"]}, + {"req": 4096, "alloc": "D", "reps": ["R1"]}, + {"req": 2000, "slop": 48, "alloc": "D", "reps": ["R1"]}, + + {"req": 15360, "alloc": "F"}, + {"req": 512, "alloc": "F"}, + {"req": 512, "alloc": "F"}, + { "alloc": "F"}, + {"req": 1024, "alloc": "F", "reps": ["R1"]}, + { "alloc": "F", "reps": ["R1"]}, + {"req": 1000, "slop": 24, "alloc": "F", "reps": ["R1", "R2"]}, + { "alloc": "F", "reps": ["R1", "R2"]}, + + {"req": 4096, "alloc": "G"}, + {"req": 8192, "alloc": "G"}, + {"req": 16384, "alloc": "G"} + ], + "traceTable": { + "A": ["AA"], + "B": ["BB"], + "C": ["CC"], + "D": ["DD"], + "E": ["EE"], + "F": ["FF"], + "G": ["GG"], + "R1": ["RR1"], + "R2": ["RR2"] + }, + "frameTable": { + "AA": "#00: A (A.cpp:99)", + "BB": "#00: B (B.cpp:99)", + "CC": "#00: C (C.cpp:99)", + "DD": "#00: D (D.cpp:99)", + "EE": "#00: E (E.cpp:99)", + "FF": "#00: F (F.cpp:99)", + "GG": "#00: G (G.cpp:99)", + "RR1": "#00: R1 (R1.cpp:99)", + "RR2": "#00: R2 (R2.cpp:99)" + } +} diff --git a/memory/replace/dmd/test/script-diff2.json b/memory/replace/dmd/test/script-diff2.json new file mode 100644 index 00000000000..144c37a5b2f --- /dev/null +++ b/memory/replace/dmd/test/script-diff2.json @@ -0,0 +1,66 @@ +{ + "version": 1, + "invocation": { + "dmdEnvVar": "--sample-below=63", + "sampleBelowSize": 63 + }, + "blockList": [ + {"req": 4096, "alloc": "A"}, + {"req": 4096, "alloc": "A"}, + {"req": 4096, "alloc": "A"}, + {"req": 4096, "alloc": "A"}, + + {"req": 8192, "alloc": "B"}, + {"req": 8192, "alloc": "B"}, + + {"req": 4000, "slop": 96, "alloc": "C"}, + {"req": 4000, "slop": 96, "alloc": "C"}, + {"req": 4000, "slop": 96, "alloc": "C"}, + {"req": 4000, "slop": 96, "alloc": "C"}, + + {"req": 4096, "alloc": "E"}, + {"req": 4096, "alloc": "E"}, + {"req": 4096, "alloc": "E"}, + {"req": 4096, "alloc": "E"}, + + {"req": 2000, "slop": 48, "alloc": "F"}, + {"req": 1000, "slop": 24, "alloc": "F", "reps": ["R1"]}, + {"req": 512, "alloc": "F"}, + {"req": 512, "alloc": "F"}, + {"req": 512, "alloc": "F"}, + {"req": 512, "alloc": "F"}, + {"req": 128, "alloc": "F"}, + { "alloc": "F", "reps": ["R1", "R2"]}, + {"req": 64, "alloc": "F"}, + {"req": 64, "alloc": "F"}, + {"req": 64, "alloc": "F"}, + {"req": 64, "alloc": "F"}, + { "alloc": "F"}, + + {"req": 4096, "alloc": "G"}, + {"req": 4096, "alloc": "G"}, + {"req": 20480, "alloc": "G"} + ], + "traceTable": { + "A": ["AA"], + "B": ["BB"], + "C": ["CC"], + "D": ["DD"], + "E": ["EE"], + "F": ["FF"], + "G": ["GG"], + "R1": ["RR1"], + "R2": ["RR2"] + }, + "frameTable": { + "AA": "#00: A (A.cpp:99)", + "BB": "#00: B (B.cpp:99)", + "CC": "#00: C (C.cpp:99)", + "DD": "#00: D (D.cpp:99)", + "EE": "#00: E (E.cpp:99)", + "FF": "#00: F (F.cpp:99)", + "GG": "#00: G (G.cpp:99)", + "RR1": "#00: R1 (R1.cpp:99)", + "RR2": "#00: R2 (R2.cpp:99)" + } +} diff --git a/memory/replace/dmd/test/test_dmd.js b/memory/replace/dmd/test/test_dmd.js index 9e71c8b8eab..ea30dfe70db 100644 --- a/memory/replace/dmd/test/test_dmd.js +++ b/memory/replace/dmd/test/test_dmd.js @@ -65,7 +65,7 @@ function runProcess(aExeFile, aArgs) { return process.exitValue; } -function test(aJsonFile, aPrefix, aOptions) { +function test(aPrefix, aArgs) { // DMD writes the JSON files to CurWorkD, so we do likewise here with // |actualFile| for consistency. It is removed once we've finished. let expectedFile = FileUtils.getFile("CurWorkD", [aPrefix + "-expected.txt"]); @@ -77,9 +77,7 @@ function test(aJsonFile, aPrefix, aOptions) { gDmdScriptFile.path, "--filter-stacks-for-testing", "-o", actualFile.path - ]; - args = args.concat(aOptions); - args.push(aJsonFile.path); + ].concat(aArgs); runProcess(new FileUtils.File(gPythonName), args); @@ -116,7 +114,7 @@ function test(aJsonFile, aPrefix, aOptions) { } function run_test() { - let jsonFile; + let jsonFile, jsonFile2; // These tests do full end-to-end testing of DMD, i.e. both the C++ code that // generates the JSON output, and the script that post-processes that output. @@ -134,8 +132,8 @@ function run_test() { for (let i = 0; i < fullTestNames.length; i++) { let name = fullTestNames[i]; jsonFile = FileUtils.getFile("CurWorkD", ["full-" + name + ".json"]); - test(jsonFile, "full-heap-" + name, ["--ignore-reports"]) - test(jsonFile, "full-reports-" + name, []) + test("full-heap-" + name, ["--ignore-reports", jsonFile.path]) + test("full-reports-" + name, [jsonFile.path]) jsonFile.remove(true); } @@ -148,27 +146,45 @@ function run_test() { // appropriately. The number of records in the output is different for each // of the tested values. jsonFile = FileUtils.getFile("CurWorkD", ["script-max-frames.json"]); - test(jsonFile, "script-max-frames-8", ["-r", "--max-frames=8"]); - test(jsonFile, "script-max-frames-3", ["-r", "--max-frames=3", - "--no-fix-stacks"]); - test(jsonFile, "script-max-frames-1", ["-r", "--max-frames=1"]); + test("script-max-frames-8", + ["--ignore-reports", "--max-frames=8", jsonFile.path]); + test("script-max-frames-3", + ["--ignore-reports", "--max-frames=3", "--no-fix-stacks", + jsonFile.path]); + test("script-max-frames-1", + ["--ignore-reports", "--max-frames=1", jsonFile.path]); - // This test has three records that are shown in a different order for each + // This file has three records that are shown in a different order for each // of the different sort values. It also tests the handling of gzipped JSON // files. jsonFile = FileUtils.getFile("CurWorkD", ["script-sort-by.json.gz"]); - test(jsonFile, "script-sort-by-usable", ["-r", "--sort-by=usable"]); - test(jsonFile, "script-sort-by-req", ["-r", "--sort-by=req", - "--no-fix-stacks"]); - test(jsonFile, "script-sort-by-slop", ["-r", "--sort-by=slop"]); + test("script-sort-by-usable", + ["--ignore-reports", "--sort-by=usable", jsonFile.path]); + test("script-sort-by-req", + ["--ignore-reports", "--sort-by=req", "--no-fix-stacks", jsonFile.path]); + test("script-sort-by-slop", + ["--ignore-reports", "--sort-by=slop", jsonFile.path]); - // This test has several real stack traces taken from Firefox execution, each + // This file has several real stack traces taken from Firefox execution, each // of which tests a different allocator function (or functions). jsonFile = FileUtils.getFile("CurWorkD", ["script-ignore-alloc-fns.json"]); - test(jsonFile, "script-ignore-alloc-fns", ["-r", "--ignore-alloc-fns"]); + test("script-ignore-alloc-fns", + ["--ignore-reports", "--ignore-alloc-fns", jsonFile.path]); - // This test has numerous allocations of different sizes, some repeated, some + // This file has numerous allocations of different sizes, some repeated, some // sampled, that all end up in the same record. jsonFile = FileUtils.getFile("CurWorkD", ["script-show-all-block-sizes.json"]); - test(jsonFile, "script-show-all-block-sizes", ["-r", "--show-all-block-sizes"]); + test("script-show-all-block-sizes", + ["--ignore-reports", "--show-all-block-sizes", jsonFile.path]); + + // This tests diffs. The first invocation has no options, the second has + // several. + jsonFile = FileUtils.getFile("CurWorkD", ["script-diff1.json"]); + jsonFile2 = FileUtils.getFile("CurWorkD", ["script-diff2.json"]); + test("script-diff-basic", + [jsonFile.path, jsonFile2.path]); + test("script-diff-options", + ["--ignore-reports", "--show-all-block-sizes", + jsonFile.path, jsonFile2.path]); } + diff --git a/memory/replace/dmd/test/xpcshell.ini b/memory/replace/dmd/test/xpcshell.ini index 143cd18d90e..155a24607f3 100644 --- a/memory/replace/dmd/test/xpcshell.ini +++ b/memory/replace/dmd/test/xpcshell.ini @@ -20,6 +20,10 @@ support-files = script-ignore-alloc-fns-expected.txt script-show-all-block-sizes.json script-show-all-block-sizes-expected.txt + script-diff1.json + script-diff2.json + script-diff-basic-expected.txt + script-diff-options-expected.txt # Bug 1077230 explains why this test is disabled on Mac 10.6. # Bug 1076446 comment 20 explains why this test is only enabled on Windows 5.1 From d699ffb9407a5ca23e0d38a1d80929da6977958e Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Mon, 20 Oct 2014 17:45:09 -0700 Subject: [PATCH 07/52] Bug 1085727 (part 1, attempt 2) - DMD: make some very short functions one-liners. r=mccr8. --- memory/replace/dmd/DMD.cpp | 79 ++++++++------------------------------ 1 file changed, 16 insertions(+), 63 deletions(-) diff --git a/memory/replace/dmd/DMD.cpp b/memory/replace/dmd/DMD.cpp index 29ae6be0205..79eaec13cdf 100644 --- a/memory/replace/dmd/DMD.cpp +++ b/memory/replace/dmd/DMD.cpp @@ -318,25 +318,11 @@ class MutexBase DISALLOW_COPY_AND_ASSIGN(MutexBase); public: - MutexBase() - { - InitializeCriticalSection(&mCS); - } + MutexBase() { InitializeCriticalSection(&mCS); } + ~MutexBase() { DeleteCriticalSection(&mCS); } - ~MutexBase() - { - DeleteCriticalSection(&mCS); - } - - void Lock() - { - EnterCriticalSection(&mCS); - } - - void Unlock() - { - LeaveCriticalSection(&mCS); - } + void Lock() { EnterCriticalSection(&mCS); } + void Unlock() { LeaveCriticalSection(&mCS); } }; #else @@ -351,20 +337,10 @@ class MutexBase DISALLOW_COPY_AND_ASSIGN(MutexBase); public: - MutexBase() - { - pthread_mutex_init(&mMutex, nullptr); - } + MutexBase() { pthread_mutex_init(&mMutex, nullptr); } - void Lock() - { - pthread_mutex_lock(&mMutex); - } - - void Unlock() - { - pthread_mutex_unlock(&mMutex); - } + void Lock() { pthread_mutex_lock(&mMutex); } + void Unlock() { pthread_mutex_unlock(&mMutex); } }; #endif @@ -394,10 +370,7 @@ public: MutexBase::Unlock(); } - bool IsLocked() - { - return mIsLocked; - } + bool IsLocked() { return mIsLocked; } }; // This lock must be held while manipulating global state, such as @@ -409,14 +382,8 @@ class AutoLockState DISALLOW_COPY_AND_ASSIGN(AutoLockState); public: - AutoLockState() - { - gStateLock->Lock(); - } - ~AutoLockState() - { - gStateLock->Unlock(); - } + AutoLockState() { gStateLock->Lock(); } + ~AutoLockState() { gStateLock->Unlock(); } }; class AutoUnlockState @@ -424,14 +391,8 @@ class AutoUnlockState DISALLOW_COPY_AND_ASSIGN(AutoUnlockState); public: - AutoUnlockState() - { - gStateLock->Unlock(); - } - ~AutoUnlockState() - { - gStateLock->Lock(); - } + AutoUnlockState() { gStateLock->Unlock(); } + ~AutoUnlockState() { gStateLock->Lock(); } }; //--------------------------------------------------------------------------- @@ -494,10 +455,7 @@ public: return mBlockIntercepts = false; } - bool InterceptsAreBlocked() const - { - return mBlockIntercepts; - } + bool InterceptsAreBlocked() const { return mBlockIntercepts; } }; /* static */ Thread* @@ -543,10 +501,7 @@ public: class StringTable { public: - StringTable() - { - (void)mSet.init(64); - } + StringTable() { (void)mSet.init(64); } const char* Intern(const char* aString) @@ -598,13 +553,11 @@ private: class StringAlloc { public: - static char* - copy(const char* aString) + static char* copy(const char* aString) { return InfallibleAllocPolicy::strdup_(aString); } - static void - free(char* aString) + static void free(char* aString) { InfallibleAllocPolicy::free_(aString); } From b5f25a2bdcb4c833a653ba7d50a5589882197653 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Mon, 20 Oct 2014 17:45:45 -0700 Subject: [PATCH 08/52] Bug 1085727 (part 2, attempt 2) - Remove dmd.py's -b option and make its behaviour the default. r=mccr8. --- memory/replace/dmd/dmd.py | 39 +++++++++---------- .../dmd/test/full-heap-sampled-expected.txt | 1 + .../test/full-heap-unsampled1-expected.txt | 3 ++ .../test/full-heap-unsampled2-expected.txt | 3 ++ .../test/full-reports-sampled-expected.txt | 1 + .../test/full-reports-unsampled1-expected.txt | 5 +++ .../test/full-reports-unsampled2-expected.txt | 3 ++ .../dmd/test/script-diff-basic-expected.txt | 25 ++++++++++-- .../dmd/test/script-diff-options-expected.txt | 12 +++--- .../dmd/test/script-max-frames-1-expected.txt | 1 + .../dmd/test/script-max-frames-3-expected.txt | 1 + .../script-show-all-block-sizes-expected.txt | 25 ------------ .../dmd/test/script-show-all-block-sizes.json | 35 ----------------- .../dmd/test/script-sort-by-req-expected.txt | 3 ++ .../dmd/test/script-sort-by-slop-expected.txt | 3 ++ .../test/script-sort-by-usable-expected.txt | 3 ++ memory/replace/dmd/test/test_dmd.js | 9 +---- memory/replace/dmd/test/xpcshell.ini | 2 - 18 files changed, 74 insertions(+), 100 deletions(-) delete mode 100644 memory/replace/dmd/test/script-show-all-block-sizes-expected.txt delete mode 100644 memory/replace/dmd/test/script-show-all-block-sizes.json diff --git a/memory/replace/dmd/dmd.py b/memory/replace/dmd/dmd.py index 036d60dc254..041f887ead4 100755 --- a/memory/replace/dmd/dmd.py +++ b/memory/replace/dmd/dmd.py @@ -77,7 +77,7 @@ class Record(object): self.reqSize == 0 and \ self.slopSize == 0 and \ self.usableSize == 0 and \ - (not args.show_all_block_sizes or len(self.usableSizes) == 0) + len(self.usableSizes) == 0 def negate(self): self.numBlocks = -self.numBlocks @@ -195,9 +195,6 @@ variable is used to find breakpad symbols for stack fixing. p.add_argument('-a', '--ignore-alloc-fns', action='store_true', help='ignore allocation functions at the start of traces') - p.add_argument('-b', '--show-all-block-sizes', action='store_true', - help='show individual block sizes for each record') - p.add_argument('--no-fix-stacks', action='store_true', help='do not fix stacks') @@ -559,24 +556,16 @@ def printDigest(args, digest): format(number(record.usableSize, isSampled), number(record.reqSize, isSampled), number(record.slopSize, isSampled))) - out(' {:4.2f}% of the heap ({:4.2f}% cumulative)'. - format(perc(record.usableSize, heapUsableSize), - perc(kindCumulativeUsableSize, heapUsableSize))) - if args.ignore_reports: - pass - else: - out(' {:4.2f}% of {:} ({:4.2f}% cumulative)'. - format(perc(record.usableSize, kindUsableSize), - recordKind, - perc(kindCumulativeUsableSize, kindUsableSize))) - if args.show_all_block_sizes: - abscmp = lambda ((usableSize1, _1a), _1b), \ - ((usableSize2, _2a), _2b): \ - cmp(abs(usableSize1), abs(usableSize2)) - usableSizes = sorted(record.usableSizes.items(), cmp=abscmp, - reverse=True) + abscmp = lambda ((usableSize1, _1a), _1b), \ + ((usableSize2, _2a), _2b): \ + cmp(abs(usableSize1), abs(usableSize2)) + usableSizes = sorted(record.usableSizes.items(), cmp=abscmp, + reverse=True) + hasSingleBlock = len(usableSizes) == 1 and usableSizes[0][1] == 1 + + if not hasSingleBlock: out(' Individual block sizes: ', end='') if len(usableSizes) == 0: out('(no change)', end='') @@ -591,6 +580,16 @@ def printDigest(args, digest): isFirst = False out() + out(' {:4.2f}% of the heap ({:4.2f}% cumulative)'. + format(perc(record.usableSize, heapUsableSize), + perc(kindCumulativeUsableSize, heapUsableSize))) + if args.ignore_reports: + pass + else: + out(' {:4.2f}% of {:} ({:4.2f}% cumulative)'. + format(perc(record.usableSize, kindUsableSize), + recordKind, + perc(kindCumulativeUsableSize, kindUsableSize))) out(' Allocated at {') printStack(record.allocatedAtDesc) out(' }') diff --git a/memory/replace/dmd/test/full-heap-sampled-expected.txt b/memory/replace/dmd/test/full-heap-sampled-expected.txt index fe840014026..f328c938723 100644 --- a/memory/replace/dmd/test/full-heap-sampled-expected.txt +++ b/memory/replace/dmd/test/full-heap-sampled-expected.txt @@ -10,6 +10,7 @@ Invocation { Live { ~4 blocks in heap block record 1 of 7 ~512 bytes (~512 requested / ~0 slop) + Individual block sizes: ~128 x 3; 128 35.96% of the heap (35.96% cumulative) Allocated at { #01: ... DMD.cpp ... diff --git a/memory/replace/dmd/test/full-heap-unsampled1-expected.txt b/memory/replace/dmd/test/full-heap-unsampled1-expected.txt index 04debedf199..199845d6b74 100644 --- a/memory/replace/dmd/test/full-heap-unsampled1-expected.txt +++ b/memory/replace/dmd/test/full-heap-unsampled1-expected.txt @@ -28,6 +28,7 @@ Live { Live { 9 blocks in heap block record 3 of 12 1,008 bytes (900 requested / 108 slop) + Individual block sizes: 112 x 9 8.34% of the heap (84.58% cumulative) Allocated at { #01: ... DMD.cpp ... @@ -37,6 +38,7 @@ Live { Live { 6 blocks in heap block record 4 of 12 528 bytes (528 requested / 0 slop) + Individual block sizes: 128; 112; 96; 80; 64; 48 4.37% of the heap (88.95% cumulative) Allocated at { #01: ... DMD.cpp ... @@ -46,6 +48,7 @@ Live { Live { 6 blocks in heap block record 5 of 12 528 bytes (528 requested / 0 slop) + Individual block sizes: 128; 112; 96; 80; 64; 48 4.37% of the heap (93.32% cumulative) Allocated at { #01: ... DMD.cpp ... diff --git a/memory/replace/dmd/test/full-heap-unsampled2-expected.txt b/memory/replace/dmd/test/full-heap-unsampled2-expected.txt index eea22c90fd1..4c2e3ab97cf 100644 --- a/memory/replace/dmd/test/full-heap-unsampled2-expected.txt +++ b/memory/replace/dmd/test/full-heap-unsampled2-expected.txt @@ -10,6 +10,7 @@ Invocation { Live { 9 blocks in heap block record 1 of 9 1,008 bytes (900 requested / 108 slop) + Individual block sizes: 112 x 9 35.49% of the heap (35.49% cumulative) Allocated at { #01: ... DMD.cpp ... @@ -19,6 +20,7 @@ Live { Live { 6 blocks in heap block record 2 of 9 528 bytes (528 requested / 0 slop) + Individual block sizes: 128; 112; 96; 80; 64; 48 18.59% of the heap (54.08% cumulative) Allocated at { #01: ... DMD.cpp ... @@ -28,6 +30,7 @@ Live { Live { 6 blocks in heap block record 3 of 9 528 bytes (528 requested / 0 slop) + Individual block sizes: 128; 112; 96; 80; 64; 48 18.59% of the heap (72.68% cumulative) Allocated at { #01: ... DMD.cpp ... diff --git a/memory/replace/dmd/test/full-reports-sampled-expected.txt b/memory/replace/dmd/test/full-reports-sampled-expected.txt index 2d96828d828..aa197e6680f 100644 --- a/memory/replace/dmd/test/full-reports-sampled-expected.txt +++ b/memory/replace/dmd/test/full-reports-sampled-expected.txt @@ -14,6 +14,7 @@ Invocation { Unreported { ~4 blocks in heap block record 1 of 7 ~512 bytes (~512 requested / ~0 slop) + Individual block sizes: ~128 x 3; 128 35.96% of the heap (35.96% cumulative) 35.96% of unreported (35.96% cumulative) Allocated at { diff --git a/memory/replace/dmd/test/full-reports-unsampled1-expected.txt b/memory/replace/dmd/test/full-reports-unsampled1-expected.txt index 28b8f166e9a..c510029fcdf 100644 --- a/memory/replace/dmd/test/full-reports-unsampled1-expected.txt +++ b/memory/replace/dmd/test/full-reports-unsampled1-expected.txt @@ -76,6 +76,7 @@ Twice-reported { Unreported { 9 blocks in heap block record 1 of 3 1,008 bytes (900 requested / 108 slop) + Individual block sizes: 112 x 9 8.34% of the heap (8.34% cumulative) 81.82% of unreported (81.82% cumulative) Allocated at { @@ -86,6 +87,7 @@ Unreported { Unreported { 2 blocks in heap block record 2 of 3 112 bytes (112 requested / 0 slop) + Individual block sizes: 64; 48 0.93% of the heap (9.27% cumulative) 9.09% of unreported (90.91% cumulative) Allocated at { @@ -96,6 +98,7 @@ Unreported { Unreported { 2 blocks in heap block record 3 of 3 112 bytes (112 requested / 0 slop) + Individual block sizes: 64; 48 0.93% of the heap (10.19% cumulative) 9.09% of unreported (100.00% cumulative) Allocated at { @@ -147,6 +150,7 @@ Once-reported { Once-reported { 2 blocks in heap block record 4 of 11 240 bytes (240 requested / 0 slop) + Individual block sizes: 128; 112 1.99% of the heap (82.46% cumulative) 2.27% of once-reported (94.18% cumulative) Allocated at { @@ -160,6 +164,7 @@ Once-reported { Once-reported { 2 blocks in heap block record 5 of 11 240 bytes (240 requested / 0 slop) + Individual block sizes: 128; 112 1.99% of the heap (84.45% cumulative) 2.27% of once-reported (96.45% cumulative) Allocated at { diff --git a/memory/replace/dmd/test/full-reports-unsampled2-expected.txt b/memory/replace/dmd/test/full-reports-unsampled2-expected.txt index a18aa5f69e6..3c3c2390cb1 100644 --- a/memory/replace/dmd/test/full-reports-unsampled2-expected.txt +++ b/memory/replace/dmd/test/full-reports-unsampled2-expected.txt @@ -44,6 +44,7 @@ Twice-reported { Unreported { 9 blocks in heap block record 1 of 3 1,008 bytes (900 requested / 108 slop) + Individual block sizes: 112 x 9 35.49% of the heap (35.49% cumulative) 48.84% of unreported (48.84% cumulative) Allocated at { @@ -54,6 +55,7 @@ Unreported { Unreported { 6 blocks in heap block record 2 of 3 528 bytes (528 requested / 0 slop) + Individual block sizes: 128; 112; 96; 80; 64; 48 18.59% of the heap (54.08% cumulative) 25.58% of unreported (74.42% cumulative) Allocated at { @@ -64,6 +66,7 @@ Unreported { Unreported { 6 blocks in heap block record 3 of 3 528 bytes (528 requested / 0 slop) + Individual block sizes: 128; 112; 96; 80; 64; 48 18.59% of the heap (72.68% cumulative) 25.58% of unreported (100.00% cumulative) Allocated at { diff --git a/memory/replace/dmd/test/script-diff-basic-expected.txt b/memory/replace/dmd/test/script-diff-basic-expected.txt index 994b025fed7..0a686204340 100644 --- a/memory/replace/dmd/test/script-diff-basic-expected.txt +++ b/memory/replace/dmd/test/script-diff-basic-expected.txt @@ -15,6 +15,7 @@ Invocation 2 { Twice-reported { ~-1 blocks in heap block record 1 of 1 ~-1,088 bytes (~-1,064 requested / ~-24 slop) + Individual block sizes: -1,024; ~-127; ~63 15.46% of the heap (15.46% cumulative) 100.00% of twice-reported (100.00% cumulative) Allocated at { @@ -31,8 +32,9 @@ Twice-reported { #----------------------------------------------------------------- Unreported { - 4 blocks in heap block record 1 of 4 + 4 blocks in heap block record 1 of 5 16,384 bytes (16,384 requested / 0 slop) + Individual block sizes: 4,096 x 4 -232.76% of the heap (-232.76% cumulative) 371.01% of unreported (371.01% cumulative) Allocated at { @@ -41,8 +43,9 @@ Unreported { } Unreported { - ~7 blocks in heap block record 2 of 4 + ~7 blocks in heap block record 2 of 5 ~-11,968 bytes (~-12,016 requested / ~48 slop) + Individual block sizes: -15,360; 2,048; 512 x 2; 128; ~-127; 64 x 4; ~63 170.02% of the heap (-62.74% cumulative) -271.01% of unreported (100.00% cumulative) Allocated at { @@ -51,8 +54,9 @@ Unreported { } Unreported { - 0 blocks in heap block record 3 of 4 + 0 blocks in heap block record 3 of 5 0 bytes (-384 requested / 384 slop) + Individual block sizes: (no change) -0.00% of the heap (-62.74% cumulative) 0.00% of unreported (100.00% cumulative) Allocated at { @@ -61,8 +65,9 @@ Unreported { } Unreported { - -2 blocks in heap block record 4 of 4 + -2 blocks in heap block record 4 of 5 0 bytes (0 requested / 0 slop) + Individual block sizes: 8,192 x 2; -4,096 x 4 -0.00% of the heap (-62.74% cumulative) 0.00% of unreported (100.00% cumulative) Allocated at { @@ -70,11 +75,23 @@ Unreported { } } +Unreported { + 0 blocks in heap block record 5 of 5 + 0 bytes (0 requested / 0 slop) + Individual block sizes: 20,480; -16,384; -8,192; 4,096 + -0.00% of the heap (-62.74% cumulative) + 0.00% of unreported (100.00% cumulative) + Allocated at { + #01: G (G.cpp:99) + } +} + #----------------------------------------------------------------- Once-reported { -3 blocks in heap block record 1 of 2 -10,240 bytes (-10,192 requested / -48 slop) + Individual block sizes: -4,096 x 2; -2,048 145.48% of the heap (145.48% cumulative) 98.77% of once-reported (98.77% cumulative) Allocated at { diff --git a/memory/replace/dmd/test/script-diff-options-expected.txt b/memory/replace/dmd/test/script-diff-options-expected.txt index 8b146a2feaf..ac7b6479318 100644 --- a/memory/replace/dmd/test/script-diff-options-expected.txt +++ b/memory/replace/dmd/test/script-diff-options-expected.txt @@ -15,8 +15,8 @@ Invocation 2 { Live { 4 blocks in heap block record 1 of 6 16,384 bytes (16,384 requested / 0 slop) - -232.76% of the heap (-232.76% cumulative) Individual block sizes: 4,096 x 4 + -232.76% of the heap (-232.76% cumulative) Allocated at { #01: E (E.cpp:99) } @@ -25,8 +25,8 @@ Live { Live { ~5 blocks in heap block record 2 of 6 ~-13,183 bytes (~-13,231 requested / ~48 slop) - 187.29% of the heap (-45.48% cumulative) Individual block sizes: -15,360; 2,048; -1,024; 512 x 2; 128; ~-127 x 3; 64 x 4; ~63 x 2 + 187.29% of the heap (-45.48% cumulative) Allocated at { #01: F (F.cpp:99) } @@ -35,8 +35,8 @@ Live { Live { -3 blocks in heap block record 3 of 6 -10,240 bytes (-10,192 requested / -48 slop) - 145.48% of the heap (100.00% cumulative) Individual block sizes: -4,096 x 2; -2,048 + 145.48% of the heap (100.00% cumulative) Allocated at { #01: D (D.cpp:99) } @@ -45,8 +45,8 @@ Live { Live { 0 blocks in heap block record 4 of 6 0 bytes (-384 requested / 384 slop) - -0.00% of the heap (100.00% cumulative) Individual block sizes: (no change) + -0.00% of the heap (100.00% cumulative) Allocated at { #01: C (C.cpp:99) } @@ -55,8 +55,8 @@ Live { Live { 0 blocks in heap block record 5 of 6 0 bytes (0 requested / 0 slop) - -0.00% of the heap (100.00% cumulative) Individual block sizes: 20,480; -16,384; -8,192; 4,096 + -0.00% of the heap (100.00% cumulative) Allocated at { #01: G (G.cpp:99) } @@ -65,8 +65,8 @@ Live { Live { -2 blocks in heap block record 6 of 6 0 bytes (0 requested / 0 slop) - -0.00% of the heap (100.00% cumulative) Individual block sizes: 8,192 x 2; -4,096 x 4 + -0.00% of the heap (100.00% cumulative) Allocated at { #01: B (B.cpp:99) } diff --git a/memory/replace/dmd/test/script-max-frames-1-expected.txt b/memory/replace/dmd/test/script-max-frames-1-expected.txt index bcd87426031..9b9547ca621 100644 --- a/memory/replace/dmd/test/script-max-frames-1-expected.txt +++ b/memory/replace/dmd/test/script-max-frames-1-expected.txt @@ -10,6 +10,7 @@ Invocation { Live { 4 blocks in heap block record 1 of 1 4,416 bytes (4,404 requested / 12 slop) + Individual block sizes: 4,096; 128; 112; 80 100.00% of the heap (100.00% cumulative) Allocated at { #01: E (E.cpp:99) diff --git a/memory/replace/dmd/test/script-max-frames-3-expected.txt b/memory/replace/dmd/test/script-max-frames-3-expected.txt index f699efb5710..fa6f645cc62 100644 --- a/memory/replace/dmd/test/script-max-frames-3-expected.txt +++ b/memory/replace/dmd/test/script-max-frames-3-expected.txt @@ -10,6 +10,7 @@ Invocation { Live { 2 blocks in heap block record 1 of 3 4,224 bytes (4,224 requested / 0 slop) + Individual block sizes: 4,096; 128 95.65% of the heap (95.65% cumulative) Allocated at { #01: E (E.cpp:99) diff --git a/memory/replace/dmd/test/script-show-all-block-sizes-expected.txt b/memory/replace/dmd/test/script-show-all-block-sizes-expected.txt deleted file mode 100644 index 7527366a6bb..00000000000 --- a/memory/replace/dmd/test/script-show-all-block-sizes-expected.txt +++ /dev/null @@ -1,25 +0,0 @@ -#----------------------------------------------------------------- - -Invocation { - $DMD = '1' - Sample-below size = 4093 -} - -#----------------------------------------------------------------- - -Live { - ~15 blocks in heap block record 1 of 1 - ~1,343,470 bytes (~1,342,313 requested / ~1,157 slop) - 100.00% of the heap (100.00% cumulative) - Individual block sizes: 1,048,576; 65,536 x 3; 40,960; 8,192 x 4; ~4,093 x 6 - Allocated at { - #01: A (A.cpp:99) - } -} - -#----------------------------------------------------------------- - -Summary { - Total: ~1,343,470 bytes in ~15 blocks -} - diff --git a/memory/replace/dmd/test/script-show-all-block-sizes.json b/memory/replace/dmd/test/script-show-all-block-sizes.json deleted file mode 100644 index fa3c2e820a0..00000000000 --- a/memory/replace/dmd/test/script-show-all-block-sizes.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "version": 1, - "invocation": { - "dmdEnvVar": "1", - "sampleBelowSize": 4093 - }, - "blockList": [ - {"req": 1048576, "alloc": "A"}, - - {"req": 65536, "alloc": "A"}, - {"req": 65535, "slop": 1, "alloc": "A"}, - {"req": 65534, "slop": 2, "alloc": "A"}, - - {"req": 40000, "slop": 960, "alloc": "A"}, - - {"req": 8192, "alloc": "A"}, - {"req": 8192, "alloc": "A"}, - {"req": 8190, "slop": 2, "alloc": "A"}, - {"req": 8000, "slop": 192, "alloc": "A"}, - - {"alloc": "A"}, - {"alloc": "A"}, - {"alloc": "A"}, - {"alloc": "A"}, - {"alloc": "A"}, - {"alloc": "A"} - ], - "traceTable": { - "A": ["AA"] - }, - "frameTable": { - "AA": "#00: A (A.cpp:99)" - } -} - diff --git a/memory/replace/dmd/test/script-sort-by-req-expected.txt b/memory/replace/dmd/test/script-sort-by-req-expected.txt index ae9393adfe6..71d829413d8 100644 --- a/memory/replace/dmd/test/script-sort-by-req-expected.txt +++ b/memory/replace/dmd/test/script-sort-by-req-expected.txt @@ -10,6 +10,7 @@ Invocation { Live { 5 blocks in heap block record 1 of 3 16,392 bytes (16,392 requested / 0 slop) + Individual block sizes: 4,096 x 4; 8 33.33% of the heap (33.33% cumulative) Allocated at { #01: A (A.cpp:99) @@ -19,6 +20,7 @@ Live { Live { 5 blocks in heap block record 2 of 3 16,400 bytes (12,016 requested / 4,384 slop) + Individual block sizes: 4,096 x 4; 16 33.35% of the heap (66.68% cumulative) Allocated at { #01: B (B.cpp:99) @@ -28,6 +30,7 @@ Live { Live { 4 blocks in heap block record 3 of 3 16,384 bytes (8,196 requested / 8,188 slop) + Individual block sizes: 4,096 x 4 33.32% of the heap (100.00% cumulative) Allocated at { #01: C (C.cpp:99) diff --git a/memory/replace/dmd/test/script-sort-by-slop-expected.txt b/memory/replace/dmd/test/script-sort-by-slop-expected.txt index 7b3c6b096c3..33cb786905c 100644 --- a/memory/replace/dmd/test/script-sort-by-slop-expected.txt +++ b/memory/replace/dmd/test/script-sort-by-slop-expected.txt @@ -10,6 +10,7 @@ Invocation { Live { 4 blocks in heap block record 1 of 3 16,384 bytes (8,196 requested / 8,188 slop) + Individual block sizes: 4,096 x 4 33.32% of the heap (33.32% cumulative) Allocated at { #01: C (C.cpp:99) @@ -19,6 +20,7 @@ Live { Live { 5 blocks in heap block record 2 of 3 16,400 bytes (12,016 requested / 4,384 slop) + Individual block sizes: 4,096 x 4; 16 33.35% of the heap (66.67% cumulative) Allocated at { #01: B (B.cpp:99) @@ -28,6 +30,7 @@ Live { Live { 5 blocks in heap block record 3 of 3 16,392 bytes (16,392 requested / 0 slop) + Individual block sizes: 4,096 x 4; 8 33.33% of the heap (100.00% cumulative) Allocated at { #01: A (A.cpp:99) diff --git a/memory/replace/dmd/test/script-sort-by-usable-expected.txt b/memory/replace/dmd/test/script-sort-by-usable-expected.txt index d1e4f4dde8e..c7db139bbc0 100644 --- a/memory/replace/dmd/test/script-sort-by-usable-expected.txt +++ b/memory/replace/dmd/test/script-sort-by-usable-expected.txt @@ -10,6 +10,7 @@ Invocation { Live { 5 blocks in heap block record 1 of 3 16,400 bytes (12,016 requested / 4,384 slop) + Individual block sizes: 4,096 x 4; 16 33.35% of the heap (33.35% cumulative) Allocated at { #01: B (B.cpp:99) @@ -19,6 +20,7 @@ Live { Live { 5 blocks in heap block record 2 of 3 16,392 bytes (16,392 requested / 0 slop) + Individual block sizes: 4,096 x 4; 8 33.33% of the heap (66.68% cumulative) Allocated at { #01: A (A.cpp:99) @@ -28,6 +30,7 @@ Live { Live { 4 blocks in heap block record 3 of 3 16,384 bytes (8,196 requested / 8,188 slop) + Individual block sizes: 4,096 x 4 33.32% of the heap (100.00% cumulative) Allocated at { #01: C (C.cpp:99) diff --git a/memory/replace/dmd/test/test_dmd.js b/memory/replace/dmd/test/test_dmd.js index ea30dfe70db..c69d92fbff9 100644 --- a/memory/replace/dmd/test/test_dmd.js +++ b/memory/replace/dmd/test/test_dmd.js @@ -171,12 +171,6 @@ function run_test() { test("script-ignore-alloc-fns", ["--ignore-reports", "--ignore-alloc-fns", jsonFile.path]); - // This file has numerous allocations of different sizes, some repeated, some - // sampled, that all end up in the same record. - jsonFile = FileUtils.getFile("CurWorkD", ["script-show-all-block-sizes.json"]); - test("script-show-all-block-sizes", - ["--ignore-reports", "--show-all-block-sizes", jsonFile.path]); - // This tests diffs. The first invocation has no options, the second has // several. jsonFile = FileUtils.getFile("CurWorkD", ["script-diff1.json"]); @@ -184,7 +178,6 @@ function run_test() { test("script-diff-basic", [jsonFile.path, jsonFile2.path]); test("script-diff-options", - ["--ignore-reports", "--show-all-block-sizes", - jsonFile.path, jsonFile2.path]); + ["--ignore-reports", jsonFile.path, jsonFile2.path]); } diff --git a/memory/replace/dmd/test/xpcshell.ini b/memory/replace/dmd/test/xpcshell.ini index 155a24607f3..05c9a2b6343 100644 --- a/memory/replace/dmd/test/xpcshell.ini +++ b/memory/replace/dmd/test/xpcshell.ini @@ -18,8 +18,6 @@ support-files = script-sort-by-slop-expected.txt script-ignore-alloc-fns.json script-ignore-alloc-fns-expected.txt - script-show-all-block-sizes.json - script-show-all-block-sizes-expected.txt script-diff1.json script-diff2.json script-diff-basic-expected.txt From e934d99086584200eb05191a33b24310ad77888e Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Mon, 20 Oct 2014 17:45:58 -0700 Subject: [PATCH 09/52] Bug 1085727 (part 3, attempt 2) - Print dmd.py's invocation at the top of its output. r=mccr8. --- memory/replace/dmd/dmd.py | 6 +++++- memory/replace/dmd/test/full-heap-empty-expected.txt | 1 + memory/replace/dmd/test/full-heap-sampled-expected.txt | 1 + memory/replace/dmd/test/full-heap-unsampled1-expected.txt | 1 + memory/replace/dmd/test/full-heap-unsampled2-expected.txt | 1 + memory/replace/dmd/test/full-reports-empty-expected.txt | 1 + memory/replace/dmd/test/full-reports-sampled-expected.txt | 1 + .../replace/dmd/test/full-reports-unsampled1-expected.txt | 1 + .../replace/dmd/test/full-reports-unsampled2-expected.txt | 1 + memory/replace/dmd/test/script-diff-basic-expected.txt | 1 + memory/replace/dmd/test/script-diff-options-expected.txt | 1 + .../replace/dmd/test/script-ignore-alloc-fns-expected.txt | 1 + memory/replace/dmd/test/script-max-frames-1-expected.txt | 1 + memory/replace/dmd/test/script-max-frames-3-expected.txt | 1 + memory/replace/dmd/test/script-max-frames-8-expected.txt | 1 + memory/replace/dmd/test/script-sort-by-req-expected.txt | 1 + memory/replace/dmd/test/script-sort-by-slop-expected.txt | 1 + memory/replace/dmd/test/script-sort-by-usable-expected.txt | 1 + 18 files changed, 22 insertions(+), 1 deletion(-) diff --git a/memory/replace/dmd/dmd.py b/memory/replace/dmd/dmd.py index 041f887ead4..206aaee8fe7 100755 --- a/memory/replace/dmd/dmd.py +++ b/memory/replace/dmd/dmd.py @@ -612,8 +612,12 @@ def printDigest(args, digest): out(' Sample-below size = ' + str(sampleBelowSize)) out('}\n') + # Print command line. Strip dirs so the output is deterministic, which is + # needed for testing. + out(separator, end='') + out('# ' + ' '.join(map(os.path.basename, sys.argv)) + '\n') + # Print invocation(s). - out(separator) if type(dmdEnvVar) is not tuple: printInvocation('', dmdEnvVar, sampleBelowSize) else: diff --git a/memory/replace/dmd/test/full-heap-empty-expected.txt b/memory/replace/dmd/test/full-heap-empty-expected.txt index 50add864a0c..78734ac34f3 100644 --- a/memory/replace/dmd/test/full-heap-empty-expected.txt +++ b/memory/replace/dmd/test/full-heap-empty-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o full-heap-empty-actual.txt --ignore-reports full-empty.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/full-heap-sampled-expected.txt b/memory/replace/dmd/test/full-heap-sampled-expected.txt index f328c938723..7ca5983817f 100644 --- a/memory/replace/dmd/test/full-heap-sampled-expected.txt +++ b/memory/replace/dmd/test/full-heap-sampled-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o full-heap-sampled-actual.txt --ignore-reports full-sampled.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/full-heap-unsampled1-expected.txt b/memory/replace/dmd/test/full-heap-unsampled1-expected.txt index 199845d6b74..a61b9b7c14b 100644 --- a/memory/replace/dmd/test/full-heap-unsampled1-expected.txt +++ b/memory/replace/dmd/test/full-heap-unsampled1-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o full-heap-unsampled1-actual.txt --ignore-reports full-unsampled1.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/full-heap-unsampled2-expected.txt b/memory/replace/dmd/test/full-heap-unsampled2-expected.txt index 4c2e3ab97cf..9cf7267ad7f 100644 --- a/memory/replace/dmd/test/full-heap-unsampled2-expected.txt +++ b/memory/replace/dmd/test/full-heap-unsampled2-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o full-heap-unsampled2-actual.txt --ignore-reports full-unsampled2.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/full-reports-empty-expected.txt b/memory/replace/dmd/test/full-reports-empty-expected.txt index 231c6911d02..865d2c0b3e0 100644 --- a/memory/replace/dmd/test/full-reports-empty-expected.txt +++ b/memory/replace/dmd/test/full-reports-empty-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o full-reports-empty-actual.txt full-empty.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/full-reports-sampled-expected.txt b/memory/replace/dmd/test/full-reports-sampled-expected.txt index aa197e6680f..8a8a0f5cc85 100644 --- a/memory/replace/dmd/test/full-reports-sampled-expected.txt +++ b/memory/replace/dmd/test/full-reports-sampled-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o full-reports-sampled-actual.txt full-sampled.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/full-reports-unsampled1-expected.txt b/memory/replace/dmd/test/full-reports-unsampled1-expected.txt index c510029fcdf..9d891d23bff 100644 --- a/memory/replace/dmd/test/full-reports-unsampled1-expected.txt +++ b/memory/replace/dmd/test/full-reports-unsampled1-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o full-reports-unsampled1-actual.txt full-unsampled1.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/full-reports-unsampled2-expected.txt b/memory/replace/dmd/test/full-reports-unsampled2-expected.txt index 3c3c2390cb1..195ecf5a946 100644 --- a/memory/replace/dmd/test/full-reports-unsampled2-expected.txt +++ b/memory/replace/dmd/test/full-reports-unsampled2-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o full-reports-unsampled2-actual.txt full-unsampled2.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/script-diff-basic-expected.txt b/memory/replace/dmd/test/script-diff-basic-expected.txt index 0a686204340..28da4ccb871 100644 --- a/memory/replace/dmd/test/script-diff-basic-expected.txt +++ b/memory/replace/dmd/test/script-diff-basic-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-diff-basic-actual.txt script-diff1.json script-diff2.json Invocation 1 { $DMD = '--sample-below=127' diff --git a/memory/replace/dmd/test/script-diff-options-expected.txt b/memory/replace/dmd/test/script-diff-options-expected.txt index ac7b6479318..e7327899c36 100644 --- a/memory/replace/dmd/test/script-diff-options-expected.txt +++ b/memory/replace/dmd/test/script-diff-options-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-diff-options-actual.txt --ignore-reports script-diff1.json script-diff2.json Invocation 1 { $DMD = '--sample-below=127' diff --git a/memory/replace/dmd/test/script-ignore-alloc-fns-expected.txt b/memory/replace/dmd/test/script-ignore-alloc-fns-expected.txt index 6cee0c48dec..fa97acdb972 100644 --- a/memory/replace/dmd/test/script-ignore-alloc-fns-expected.txt +++ b/memory/replace/dmd/test/script-ignore-alloc-fns-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-ignore-alloc-fns-actual.txt --ignore-reports --ignore-alloc-fns script-ignore-alloc-fns.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/script-max-frames-1-expected.txt b/memory/replace/dmd/test/script-max-frames-1-expected.txt index 9b9547ca621..582dcc45c42 100644 --- a/memory/replace/dmd/test/script-max-frames-1-expected.txt +++ b/memory/replace/dmd/test/script-max-frames-1-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-max-frames-1-actual.txt --ignore-reports --max-frames=1 script-max-frames.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/script-max-frames-3-expected.txt b/memory/replace/dmd/test/script-max-frames-3-expected.txt index fa6f645cc62..fd6a74540f8 100644 --- a/memory/replace/dmd/test/script-max-frames-3-expected.txt +++ b/memory/replace/dmd/test/script-max-frames-3-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-max-frames-3-actual.txt --ignore-reports --max-frames=3 --no-fix-stacks script-max-frames.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/script-max-frames-8-expected.txt b/memory/replace/dmd/test/script-max-frames-8-expected.txt index cd126ad4ff4..ffc49d156e4 100644 --- a/memory/replace/dmd/test/script-max-frames-8-expected.txt +++ b/memory/replace/dmd/test/script-max-frames-8-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-max-frames-8-actual.txt --ignore-reports --max-frames=8 script-max-frames.json Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/script-sort-by-req-expected.txt b/memory/replace/dmd/test/script-sort-by-req-expected.txt index 71d829413d8..2f6da2aa458 100644 --- a/memory/replace/dmd/test/script-sort-by-req-expected.txt +++ b/memory/replace/dmd/test/script-sort-by-req-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-sort-by-req-actual.txt --ignore-reports --sort-by=req --no-fix-stacks script-sort-by.json.gz Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/script-sort-by-slop-expected.txt b/memory/replace/dmd/test/script-sort-by-slop-expected.txt index 33cb786905c..97bd95d7d90 100644 --- a/memory/replace/dmd/test/script-sort-by-slop-expected.txt +++ b/memory/replace/dmd/test/script-sort-by-slop-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-sort-by-slop-actual.txt --ignore-reports --sort-by=slop script-sort-by.json.gz Invocation { $DMD = '1' diff --git a/memory/replace/dmd/test/script-sort-by-usable-expected.txt b/memory/replace/dmd/test/script-sort-by-usable-expected.txt index c7db139bbc0..93dec6fe281 100644 --- a/memory/replace/dmd/test/script-sort-by-usable-expected.txt +++ b/memory/replace/dmd/test/script-sort-by-usable-expected.txt @@ -1,4 +1,5 @@ #----------------------------------------------------------------- +# dmd.py --filter-stacks-for-testing -o script-sort-by-usable-actual.txt --ignore-reports --sort-by=usable script-sort-by.json.gz Invocation { $DMD = '1' From 718ce6f277cc25064be98a7d8ac288661263f325 Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Sun, 26 Oct 2014 08:01:00 -0400 Subject: [PATCH 10/52] Bug 1083071 - Avoid touching D3D11 at all, even to test if it works, if D3D11 layers are blacklisted. r=Bas, r=jmuizelaar --- gfx/thebes/gfxWindowsPlatform.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gfx/thebes/gfxWindowsPlatform.cpp b/gfx/thebes/gfxWindowsPlatform.cpp index 7df8471841f..e036166fc76 100644 --- a/gfx/thebes/gfxWindowsPlatform.cpp +++ b/gfx/thebes/gfxWindowsPlatform.cpp @@ -1572,6 +1572,16 @@ gfxWindowsPlatform::InitD3D11Devices() { mD3D11DeviceInitialized = true; + nsCOMPtr gfxInfo = do_GetService("@mozilla.org/gfx/info;1"); + if (gfxInfo) { + int32_t status; + if (NS_SUCCEEDED(gfxInfo->GetFeatureStatus(nsIGfxInfo::FEATURE_DIRECT3D_11_LAYERS, &status))) { + if (status != nsIGfxInfo::FEATURE_STATUS_OK) { + return nullptr; + } + } + } + nsModuleHandle d3d11Module(LoadLibrarySystem32(L"d3d11.dll")); decltype(D3D11CreateDevice)* d3d11CreateDevice = (decltype(D3D11CreateDevice)*) GetProcAddress(d3d11Module, "D3D11CreateDevice"); From a1c483ddd94b4e249f3679a81c7457b50337a893 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Sun, 26 Oct 2014 18:44:40 -0400 Subject: [PATCH 11/52] Backed out changeset 4d4abe4bee7f (bug 1083071) for bustage. --- gfx/thebes/gfxWindowsPlatform.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/gfx/thebes/gfxWindowsPlatform.cpp b/gfx/thebes/gfxWindowsPlatform.cpp index e036166fc76..7df8471841f 100644 --- a/gfx/thebes/gfxWindowsPlatform.cpp +++ b/gfx/thebes/gfxWindowsPlatform.cpp @@ -1572,16 +1572,6 @@ gfxWindowsPlatform::InitD3D11Devices() { mD3D11DeviceInitialized = true; - nsCOMPtr gfxInfo = do_GetService("@mozilla.org/gfx/info;1"); - if (gfxInfo) { - int32_t status; - if (NS_SUCCEEDED(gfxInfo->GetFeatureStatus(nsIGfxInfo::FEATURE_DIRECT3D_11_LAYERS, &status))) { - if (status != nsIGfxInfo::FEATURE_STATUS_OK) { - return nullptr; - } - } - } - nsModuleHandle d3d11Module(LoadLibrarySystem32(L"d3d11.dll")); decltype(D3D11CreateDevice)* d3d11CreateDevice = (decltype(D3D11CreateDevice)*) GetProcAddress(d3d11Module, "D3D11CreateDevice"); From f5615284a49e29f2726daf6a11ac578a0be31d0f Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Sun, 26 Oct 2014 18:46:09 -0400 Subject: [PATCH 12/52] Bug 1083071 - Avoid touching D3D11 at all, even to test if it works, if D3D11 layers are blacklisted. r=Bas, r=jmuizelaar --- gfx/thebes/gfxWindowsPlatform.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gfx/thebes/gfxWindowsPlatform.cpp b/gfx/thebes/gfxWindowsPlatform.cpp index 7df8471841f..42bf145285f 100644 --- a/gfx/thebes/gfxWindowsPlatform.cpp +++ b/gfx/thebes/gfxWindowsPlatform.cpp @@ -1572,6 +1572,16 @@ gfxWindowsPlatform::InitD3D11Devices() { mD3D11DeviceInitialized = true; + nsCOMPtr gfxInfo = do_GetService("@mozilla.org/gfx/info;1"); + if (gfxInfo) { + int32_t status; + if (NS_SUCCEEDED(gfxInfo->GetFeatureStatus(nsIGfxInfo::FEATURE_DIRECT3D_11_LAYERS, &status))) { + if (status != nsIGfxInfo::FEATURE_STATUS_OK) { + return; + } + } + } + nsModuleHandle d3d11Module(LoadLibrarySystem32(L"d3d11.dll")); decltype(D3D11CreateDevice)* d3d11CreateDevice = (decltype(D3D11CreateDevice)*) GetProcAddress(d3d11Module, "D3D11CreateDevice"); From b3fe66987338a162b99fbce3416475cb28348bfb Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 23 Oct 2014 17:25:19 -0700 Subject: [PATCH 13/52] Bug 1080302 (part 1) - Add support for --foo and /foo options where it's not already present. r=glandium. --- python/mozbuild/mozbuild/mach_commands.py | 4 +++- toolkit/xre/nsNativeAppSupportWin.cpp | 4 ++-- webapprt/gtk/webapprt.cpp | 4 ++-- webapprt/win/webapprt.cpp | 4 +++- widget/windows/winrt/MetroContracts.cpp | 5 ++++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/python/mozbuild/mozbuild/mach_commands.py b/python/mozbuild/mozbuild/mach_commands.py index 057c4b56b71..08d2c6ceb2f 100644 --- a/python/mozbuild/mozbuild/mach_commands.py +++ b/python/mozbuild/mozbuild/mach_commands.py @@ -851,7 +851,9 @@ class RunProgram(MachCommandBase): if not background and sys.platform == 'darwin': args.append('-foreground') - if '-profile' not in params and '-P' not in params and not noprofile: + no_profile_option_given = \ + all(p not in params for p in ['-profile', '--profile', '-P']) + if no_profile_option_given and not noprofile: path = os.path.join(self.topobjdir, 'tmp', 'scratch_user') if not os.path.isdir(path): os.makedirs(path) diff --git a/toolkit/xre/nsNativeAppSupportWin.cpp b/toolkit/xre/nsNativeAppSupportWin.cpp index d8f7155ab6b..49d75890408 100644 --- a/toolkit/xre/nsNativeAppSupportWin.cpp +++ b/toolkit/xre/nsNativeAppSupportWin.cpp @@ -334,8 +334,8 @@ NS_IMPL_RELEASE_INHERITED(nsNativeAppSupportWin, nsNativeAppSupportBase) void nsNativeAppSupportWin::CheckConsole() { for ( int i = 1; i < gArgc; i++ ) { - if ( strcmp( "-console", gArgv[i] ) == 0 - || + if ( strcmp( "-console", gArgv[i] ) == 0 || + strcmp( "--console", gArgv[i] ) == 0 || strcmp( "/console", gArgv[i] ) == 0 ) { // Users wants to make sure we have a console. // Try to allocate one. diff --git a/webapprt/gtk/webapprt.cpp b/webapprt/gtk/webapprt.cpp index 3ea1f41b01b..a8487485ec9 100644 --- a/webapprt/gtk/webapprt.cpp +++ b/webapprt/gtk/webapprt.cpp @@ -327,10 +327,10 @@ int main(int argc, char *argv[]) bool removeApp = false; for (int i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-profile")) { + if (!strcmp(argv[i], "-profile") || !strcmp(argv[i], "--profile")) { isProfileOverridden = true; } - else if (!strcmp(argv[i], "-remove")) { + else if (!strcmp(argv[i], "-remove") || !strcmp(argv[i], "--remove")) { removeApp = true; } } diff --git a/webapprt/win/webapprt.cpp b/webapprt/win/webapprt.cpp index 9b7c404ecdd..fe968593069 100644 --- a/webapprt/win/webapprt.cpp +++ b/webapprt/win/webapprt.cpp @@ -446,7 +446,9 @@ main(int argc, char* argv[]) // Check if the runtime was executed with the "-profile" argument for (int i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-profile")) { + if (!strcmp(argv[i], "-profile") || + !strcmp(argv[i], "--profile") || + !strcmp(argv[i], "/profile")) { isProfileOverridden = true; break; } diff --git a/widget/windows/winrt/MetroContracts.cpp b/widget/windows/winrt/MetroContracts.cpp index 60118eda54e..02697c0a63f 100644 --- a/widget/windows/winrt/MetroContracts.cpp +++ b/widget/windows/winrt/MetroContracts.cpp @@ -103,7 +103,10 @@ FrameworkView::LaunchActivated(ComPtr& aArgs, bool aS int argc; unsigned int length; LPWSTR* argv = CommandLineToArgvW(data.GetRawBuffer(&length), &argc); - if (aStartup && argc == 2 && !wcsicmp(argv[0], L"-url")) { + if (aStartup && argc == 2 && + (!wcsicmp(argv[0], L"-url") || + !wcsicmp(argv[0], L"--url") || + !wcsicmp(argv[0], L"/url"))) { WindowsCreateString(argv[1], wcslen(argv[1]), &sActivationURI); } else { // Some other command line or this is not a startup. From 0489de37fb681a3e2d2054513eabcfa8d5741e1a Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 23 Oct 2014 17:35:27 -0700 Subject: [PATCH 14/52] Bug 1080302 (part 2) - Convert all mentions of -foo options to --foo options in comments, help messages and error messages. r=glandium. --- b2g/components/OopCommandLine.js | 2 +- b2g/gaia/run-b2g.c | 4 +- browser/base/content/browser.js | 2 +- .../content/test/general/browser_bug520538.js | 6 +- .../browser_save_private_link_perwindowpb.js | 2 +- browser/components/nsBrowserContentHandler.js | 16 ++-- .../components/shell/nsSetDefaultBrowser.js | 4 +- browser/devtools/devtools-clhandler.js | 4 +- .../devtools/webide/components/webideCli.js | 6 +- browser/metro/components/BrowserCLH.js | 4 +- .../CommandExecuteHandler.cpp | 2 +- docshell/base/nsDocShell.cpp | 2 +- layout/tools/recording/recording-cmdline.js | 4 +- layout/tools/reftest/reftest-cmdline.js | 2 +- .../extensions/tps/components/tps-cmdline.js | 6 +- .../commandlines/nsICommandLine.idl | 2 +- .../commandlines/nsICommandLineHandler.idl | 2 +- .../components/console/jsconsole-clhandler.js | 2 +- toolkit/mozapps/update/updater/updater.cpp | 2 +- toolkit/xre/nsAppRunner.cpp | 74 +++++++++---------- toolkit/xre/nsNativeAppSupportWin.cpp | 10 +-- webapprt/mac/webapprt.mm | 2 +- webapprt/win/webapprt.cpp | 2 +- widget/windows/winrt/MetroContracts.cpp | 2 +- xpfe/test/winopen.js | 4 +- 25 files changed, 85 insertions(+), 83 deletions(-) diff --git a/b2g/components/OopCommandLine.js b/b2g/components/OopCommandLine.js index 56df0e9f0a2..cfe13ed914b 100644 --- a/b2g/components/OopCommandLine.js +++ b/b2g/components/OopCommandLine.js @@ -39,7 +39,7 @@ oopCommandlineHandler.prototype = { } }, - helpInfo: " -oop Use out-of-process model in B2G\n", + helpInfo: " --oop Use out-of-process model in B2G\n", classID: Components.ID("{e30b0e13-2d12-4cb0-bc4c-4e617a1bf76e}"), QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler]), }; diff --git a/b2g/gaia/run-b2g.c b/b2g/gaia/run-b2g.c index 325182e75ec..2fffa9f176c 100644 --- a/b2g/gaia/run-b2g.c +++ b/b2g/gaia/run-b2g.c @@ -35,9 +35,11 @@ int main(int argc, char* argv[], char* envp[]){ sprintf(full_path, "%s/%s", cwd, B2G_NAME); sprintf(full_profile_path, "%s/%s", cwd, GAIA_PATH); free(cwd); - printf("Running: %s -profile %s\n", full_path, full_profile_path); + printf("Running: %s --profile %s\n", full_path, full_profile_path); fflush(stdout); fflush(stderr); + // XXX: yes, the printf above says --profile and this execle uses -profile. + // Bug 1088430 will change the execle to use --profile. execle(full_path, full_path, "-profile", full_profile_path, NULL, envp); error("unable to start"); perror(argv[0]); diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index e86b41e9da8..6669fbd4d6a 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -4259,7 +4259,7 @@ nsBrowserAccess.prototype = { var isExternal = (aContext == Ci.nsIBrowserDOMWindow.OPEN_EXTERNAL); if (isExternal && aURI && aURI.schemeIs("chrome")) { - dump("use -chrome command-line option to load external chrome urls\n"); + dump("use --chrome command-line option to load external chrome urls\n"); return null; } diff --git a/browser/base/content/test/general/browser_bug520538.js b/browser/base/content/test/general/browser_bug520538.js index 4489b64c3ca..e0b64db9dfa 100644 --- a/browser/base/content/test/general/browser_bug520538.js +++ b/browser/base/content/test/general/browser_bug520538.js @@ -6,10 +6,10 @@ function test() { Ci.nsIBrowserDOMWindow.OPEN_NEWTAB, Ci.nsIBrowserDOMWindow.OPEN_EXTERNAL); is(gBrowser.tabs.length, tabCount + 1, - "'-new-tab about:blank' opens a new tab"); + "'--new-tab about:blank' opens a new tab"); is(gBrowser.selectedTab, gBrowser.tabs[tabCount], - "'-new-tab about:blank' selects the new tab"); + "'--new-tab about:blank' selects the new tab"); is(document.activeElement, gURLBar.inputField, - "'-new-tab about:blank' focuses the location bar"); + "'--new-tab about:blank' focuses the location bar"); gBrowser.removeCurrentTab(); } diff --git a/browser/base/content/test/general/browser_save_private_link_perwindowpb.js b/browser/base/content/test/general/browser_save_private_link_perwindowpb.js index c34c67fccc6..c3ba0530565 100644 --- a/browser/base/content/test/general/browser_save_private_link_perwindowpb.js +++ b/browser/base/content/test/general/browser_save_private_link_perwindowpb.js @@ -92,7 +92,7 @@ function test() { } aWindow.gBrowser.addEventListener("pageshow", function pageShown(event) { - // If data: -url PAC file isn't loaded soon enough, we may get about:privatebrowsing loaded + // If data: --url PAC file isn't loaded soon enough, we may get about:privatebrowsing loaded if (event.target.location == "about:blank" || event.target.location == "about:privatebrowsing") { aWindow.gBrowser.selectedBrowser.loadURI(testURI); diff --git a/browser/components/nsBrowserContentHandler.js b/browser/components/nsBrowserContentHandler.js index 20db9e6b287..9722b0fe88f 100644 --- a/browser/components/nsBrowserContentHandler.js +++ b/browser/components/nsBrowserContentHandler.js @@ -48,7 +48,7 @@ function shouldLoadURI(aURI) { return true; dump("*** Preventing external load of chrome: URI into browser window\n"); - dump(" Use -chrome instead\n"); + dump(" Use --chrome instead\n"); return false; } @@ -456,16 +456,16 @@ nsBrowserContentHandler.prototype = { #endif }, - helpInfo : " -browser Open a browser window.\n" + - " -new-window Open in a new window.\n" + - " -new-tab Open in a new tab.\n" + - " -private-window Open in a new private window.\n" + + helpInfo : " --browser Open a browser window.\n" + + " --new-window Open in a new window.\n" + + " --new-tab Open in a new tab.\n" + + " --private-window Open in a new private window.\n" + #ifdef XP_WIN - " -preferences Open Options dialog.\n" + + " --preferences Open Options dialog.\n" + #else - " -preferences Open Preferences dialog.\n" + + " --preferences Open Preferences dialog.\n" + #endif - " -search Search with your default search engine.\n", + " --search Search with your default search engine.\n", /* nsIBrowserHandler */ diff --git a/browser/components/shell/nsSetDefaultBrowser.js b/browser/components/shell/nsSetDefaultBrowser.js index f0fb661f728..d63a9d1635c 100644 --- a/browser/components/shell/nsSetDefaultBrowser.js +++ b/browser/components/shell/nsSetDefaultBrowser.js @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* - * -setDefaultBrowser commandline handler + * --setDefaultBrowser commandline handler * Makes the current executable the "default browser". */ @@ -22,7 +22,7 @@ nsSetDefaultBrowser.prototype = { } }, - helpInfo: " -setDefaultBrowser Set this app as the default browser.\n", + helpInfo: " --setDefaultBrowser Set this app as the default browser.\n", classID: Components.ID("{F57899D0-4E2C-4ac6-9E29-50C736103B0C}"), QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler]), diff --git a/browser/devtools/devtools-clhandler.js b/browser/devtools/devtools-clhandler.js index 079e2cce9c6..4b870c3570c 100644 --- a/browser/devtools/devtools-clhandler.js +++ b/browser/devtools/devtools-clhandler.js @@ -67,8 +67,8 @@ devtoolsCommandlineHandler.prototype = { } }, - helpInfo : " -jsconsole Open the Browser Console.\n" + - " -jsdebugger Open the Browser Toolbox.\n", + helpInfo : " --jsconsole Open the Browser Console.\n" + + " --jsdebugger Open the Browser Toolbox.\n", classID: Components.ID("{9e9a9283-0ce9-4e4a-8f1c-ba129a032c32}"), QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler]), diff --git a/browser/devtools/webide/components/webideCli.js b/browser/devtools/webide/components/webideCli.js index 8abccdd8cd9..3f98bc89016 100644 --- a/browser/devtools/webide/components/webideCli.js +++ b/browser/devtools/webide/components/webideCli.js @@ -10,7 +10,7 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm"); /** - * Handles -webide command line option. + * Handles --webide command line option. */ function webideCli() { } @@ -23,10 +23,10 @@ webideCli.prototype = { return; } - // If -webide is used remotely, we don't want to open + // If --webide is used remotely, we don't want to open // a new tab. // - // If -webide is used for a new Firefox instance, we + // If --webide is used for a new Firefox instance, we // want to open webide only. cmdLine.preventDefault = true; diff --git a/browser/metro/components/BrowserCLH.js b/browser/metro/components/BrowserCLH.js index 6d1b9e5405c..eb12c1e0845 100644 --- a/browser/metro/components/BrowserCLH.js +++ b/browser/metro/components/BrowserCLH.js @@ -137,10 +137,10 @@ BrowserCLH.prototype = { #endif // Instantiate the search service so the search engine cache is created now // instead when the application is running. The install process will register - // this component by using the -silent command line flag, thereby creating + // this component by using the --silent command line flag, thereby creating // the cache during install, not runtime. // NOTE: This code assumes this CLH is run before the nsDefaultCLH, which - // consumes the "-silent" flag. + // consumes the "--silent" flag. if (aCmdLine.findFlag("silent", false) > -1) { let searchService = Services.search; let autoComplete = Cc["@mozilla.org/autocomplete/search;1?name=history"]. diff --git a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.cpp b/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.cpp index 8894239d677..6c8d764e686 100644 --- a/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.cpp +++ b/browser/metro/shell/commandexecutehandler/CommandExecuteHandler.cpp @@ -616,7 +616,7 @@ void LaunchDesktopBrowserWithParams(CStringW& aBrowserPath, CStringW& aVerb, params += "\""; } - // Tack on any extra parameters we received (for example -profilemanager) + // Tack on any extra parameters we received (for example --profilemanager) if (!aParameters.IsEmpty()) { params += " "; params += aParameters; diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index f3f7d090af1..2ab1698c3e9 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -9642,7 +9642,7 @@ nsDocShell::InternalLoad(nsIURI * aURI, // Disallow external chrome: loads targetted at content windows bool isChrome = false; if (NS_SUCCEEDED(aURI->SchemeIs("chrome", &isChrome)) && isChrome) { - NS_WARNING("blocked external chrome: url -- use '-chrome' option"); + NS_WARNING("blocked external chrome: url -- use '--chrome' option"); return NS_ERROR_FAILURE; } diff --git a/layout/tools/recording/recording-cmdline.js b/layout/tools/recording/recording-cmdline.js index ec0e8343abd..e043aa29caa 100644 --- a/layout/tools/recording/recording-cmdline.js +++ b/layout/tools/recording/recording-cmdline.js @@ -67,8 +67,8 @@ RecordingCmdLineHandler.prototype = cmdLine.preventDefault = true; }, - helpInfo : " -recording Record drawing for a given URL.\n" + - " -recording-output Specify destination file for a drawing recording.\n" + helpInfo : " --recording Record drawing for a given URL.\n" + + " --recording-output Specify destination file for a drawing recording.\n" }; this.NSGetFactory = XPCOMUtils.generateNSGetFactory([RecordingCmdLineHandler]); diff --git a/layout/tools/reftest/reftest-cmdline.js b/layout/tools/reftest/reftest-cmdline.js index e2654de1f71..fde70c9c04a 100644 --- a/layout/tools/reftest/reftest-cmdline.js +++ b/layout/tools/reftest/reftest-cmdline.js @@ -105,7 +105,7 @@ RefTestCmdLineHandler.prototype = cmdLine.preventDefault = true; }, - helpInfo : " -reftest Run layout acceptance tests on given manifest.\n" + helpInfo : " --reftest Run layout acceptance tests on given manifest.\n" }; this.NSGetFactory = XPCOMUtils.generateNSGetFactory([RefTestCmdLineHandler]); diff --git a/services/sync/tps/extensions/tps/components/tps-cmdline.js b/services/sync/tps/extensions/tps/components/tps-cmdline.js index 67e9293fb6c..aaa9870ba8c 100644 --- a/services/sync/tps/extensions/tps/components/tps-cmdline.js +++ b/services/sync/tps/extensions/tps/components/tps-cmdline.js @@ -72,9 +72,9 @@ TPSCmdLineHandler.prototype = { //cmdLine.preventDefault = true; }, - helpInfo : " -tps Run TPS tests with the given test file.\n" + - " -tpsphase Run the specified phase in the TPS test.\n" + - " -tpslogfile Logfile for TPS output.\n" + + helpInfo : " --tps Run TPS tests with the given test file.\n" + + " --tpsphase Run the specified phase in the TPS test.\n" + + " --tpslogfile Logfile for TPS output.\n" + " --ignore-unused-engines Don't load engines not used in tests.\n", }; diff --git a/toolkit/components/commandlines/nsICommandLine.idl b/toolkit/components/commandlines/nsICommandLine.idl index 14e592d7513..e44b3de9a3c 100644 --- a/toolkit/components/commandlines/nsICommandLine.idl +++ b/toolkit/components/commandlines/nsICommandLine.idl @@ -16,7 +16,7 @@ interface nsIDOMWindow; * DEFINITIONS: * "arguments" are any values found on the command line. * "flags" are switches. In normalized form they are preceded by a single dash. - * Some flags may take "parameters", e.g. "-url " or "-install-xpi " + * Some flags may take "parameters", e.g. "--url ". */ [scriptable, uuid(bc3173bd-aa46-46a0-9d25-d9867a9659b6)] diff --git a/toolkit/components/commandlines/nsICommandLineHandler.idl b/toolkit/components/commandlines/nsICommandLineHandler.idl index 16607029a6e..cd042d6a539 100644 --- a/toolkit/components/commandlines/nsICommandLineHandler.idl +++ b/toolkit/components/commandlines/nsICommandLineHandler.idl @@ -43,7 +43,7 @@ interface nsICommandLineHandler : nsISupports void handle(in nsICommandLine aCommandLine); /** - * When the app is launched with the -help argument, this attribute + * When the app is launched with the --help argument, this attribute * is retrieved and displayed to the user (on stdout). The text should * have embedded newlines which wrap at 76 columns, and should include * a newline at the end. By convention, the right column which contains flag diff --git a/toolkit/components/console/jsconsole-clhandler.js b/toolkit/components/console/jsconsole-clhandler.js index 3fbbce3f80c..4411321eba9 100644 --- a/toolkit/components/console/jsconsole-clhandler.js +++ b/toolkit/components/console/jsconsole-clhandler.js @@ -31,7 +31,7 @@ jsConsoleHandler.prototype = { cmdLine.preventDefault = true; }, - helpInfo : " -jsconsole Open the Error console.\n", + helpInfo : " --jsconsole Open the Error console.\n", classID: Components.ID("{2cd0c310-e127-44d0-88fc-4435c9ab4d4b}"), QueryInterface: XPCOMUtils.generateQI([Ci.nsICommandLineHandler]), diff --git a/toolkit/mozapps/update/updater/updater.cpp b/toolkit/mozapps/update/updater/updater.cpp index d0690c91055..2b198b20858 100644 --- a/toolkit/mozapps/update/updater/updater.cpp +++ b/toolkit/mozapps/update/updater/updater.cpp @@ -2185,7 +2185,7 @@ UpdateThreadFunc(void *param) // staged directory as it won't be useful any more. ensure_remove_recursive(gWorkingDirPath); WriteStatusFile(sUsingService ? "pending-service" : "pending"); - putenv(const_cast("MOZ_PROCESS_UPDATES=")); // We need to use -process-updates again in the tests + putenv(const_cast("MOZ_PROCESS_UPDATES=")); // We need to use --process-updates again in the tests reportRealResults = false; // pretend success } diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index df50e9fa758..b0adaca1b3c 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -491,7 +491,7 @@ CheckArg(const char* aArg, bool aCheckOSInt = false, const char **aParam = nullp ArgResult arOSInt = CheckArg("osint"); if (arOSInt == ARG_FOUND) { ar = ARG_BAD; - PR_fprintf(PR_STDERR, "Error: argument -osint is invalid\n"); + PR_fprintf(PR_STDERR, "Error: argument --osint is invalid\n"); } } @@ -1513,22 +1513,22 @@ DumpHelp() "\n%s options\n", gAppData->name); #endif - printf(" -h or -help Print this message.\n" - " -v or -version Print %s version.\n" + printf(" -h or --help Print this message.\n" + " -v or --version Print %s version.\n" " -P Start with .\n" - " -profile Start with profile at .\n" - " -migration Start with migration wizard.\n" - " -ProfileManager Start with ProfileManager.\n" - " -no-remote Do not accept or send remote commands; implies -new-instance.\n" - " -new-instance Open new instance, not a new window in running instance.\n" - " -UILocale Start with resources as UI Locale.\n" - " -safe-mode Disables extensions and themes for this session.\n", gAppData->name); + " --profile Start with profile at .\n" + " --migration Start with migration wizard.\n" + " --ProfileManager Start with ProfileManager.\n" + " --no-remote Do not accept or send remote commands; implies --new-instance.\n" + " --new-instance Open new instance, not a new window in running instance.\n" + " --UILocale Start with resources as UI Locale.\n" + " --safe-mode Disables extensions and themes for this session.\n", gAppData->name); #if defined(XP_WIN) - printf(" -console Start %s with a debugging console.\n", gAppData->name); + printf(" --console Start %s with a debugging console.\n", gAppData->name); #endif - // this works, but only after the components have registered. so if you drop in a new command line handler, -help + // this works, but only after the components have registered. so if you drop in a new command line handler, --help // won't not until the second run. // out of the bug, because we ship a component.reg file, it works correctly. DumpArbitraryHelp(); @@ -2092,9 +2092,9 @@ static bool gDoProfileReset = false; // Pick a profile. We need to end up with a profile lock. // -// 1) check for -profile +// 1) check for --profile // 2) check for -P -// 3) check for -ProfileManager +// 3) check for --ProfileManager // 4) use the default profile, if there is one // 5) if there are *no* profiles, set up profile-migration // 6) display the profile-manager UI @@ -2112,7 +2112,7 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n ar = CheckArg("offline", true); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -offline is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument --offline is invalid when argument --osint is specified\n"); return NS_ERROR_FAILURE; } @@ -2128,7 +2128,7 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n // reset-profile and migration args need to be checked before any profiles are chosen below. ar = CheckArg("reset-profile", true); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -reset-profile is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument --reset-profile is invalid when argument --osint is specified\n"); return NS_ERROR_FAILURE; } else if (ar == ARG_FOUND) { gDoProfileReset = true; @@ -2136,7 +2136,7 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n ar = CheckArg("migration", true); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -migration is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument --migration is invalid when argument --osint is specified\n"); return NS_ERROR_FAILURE; } else if (ar == ARG_FOUND) { gDoMigration = true; @@ -2197,7 +2197,7 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n ar = CheckArg("profile", true, &arg); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -profile requires a path\n"); + PR_fprintf(PR_STDERR, "Error: argument --profile requires a path\n"); return NS_ERROR_FAILURE; } if (ar) { @@ -2231,7 +2231,7 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n ar = CheckArg("createprofile", true, &arg); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -createprofile requires a profile name\n"); + PR_fprintf(PR_STDERR, "Error: argument --createprofile requires a profile name\n"); return NS_ERROR_FAILURE; } if (ar) { @@ -2246,8 +2246,8 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n PR_fprintf(PR_STDERR, "Error: profile path not valid.\n"); return rv; } - - // As with -profile, assume that the given path will be used for the + + // As with --profile, assume that the given path will be used for the // main profile directory. rv = aProfileSvc->CreateProfile(lf, nsDependentCSubstring(arg, delim), getter_AddRefs(profile)); @@ -2288,7 +2288,7 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n if (ar == ARG_BAD) { ar = CheckArg("osint"); if (ar == ARG_FOUND) { - PR_fprintf(PR_STDERR, "Error: argument -p is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument -p is invalid when argument --osint is specified\n"); return NS_ERROR_FAILURE; } @@ -2299,7 +2299,7 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n if (ar) { ar = CheckArg("osint"); if (ar == ARG_FOUND) { - PR_fprintf(PR_STDERR, "Error: argument -p is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument -p is invalid when argument --osint is specified\n"); return NS_ERROR_FAILURE; } nsCOMPtr profile; @@ -2329,7 +2329,7 @@ SelectProfile(nsIProfileLock* *aResult, nsIToolkitProfileService* aProfileSvc, n ar = CheckArg("profilemanager", true); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -profilemanager is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument --profilemanager is invalid when argument --osint is specified\n"); return NS_ERROR_FAILURE; } else if (ar == ARG_FOUND && CanShowProfileManager()) { return ShowProfileManager(aProfileSvc, aNative); @@ -3010,7 +3010,7 @@ XREMain::XRE_mainInit(bool* aExitFlag) const char* override = nullptr; ar = CheckArg("override", true, &override); if (ar == ARG_BAD) { - Output(true, "Incorrect number of arguments passed to -override"); + Output(true, "Incorrect number of arguments passed to --override"); return 1; } else if (ar == ARG_FOUND) { @@ -3220,7 +3220,7 @@ XREMain::XRE_mainInit(bool* aExitFlag) ar = CheckArg("safe-mode", true); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -safe-mode is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument --safe-mode is invalid when argument --osint is specified\n"); return 1; } else if (ar == ARG_FOUND) { gSafeMode = true; @@ -3243,12 +3243,12 @@ XREMain::XRE_mainInit(bool* aExitFlag) gSafeMode = true; #endif - // Handle -no-remote and -new-instance command line arguments. Setup + // Handle --no-remote and --new-instance command line arguments. Setup // the environment to better accommodate other components and various // restart scenarios. ar = CheckArg("no-remote", true); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -no-remote is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument --no-remote is invalid when argument --osint is specified\n"); return 1; } else if (ar == ARG_FOUND) { SaveToEnv("MOZ_NO_REMOTE=1"); @@ -3256,13 +3256,13 @@ XREMain::XRE_mainInit(bool* aExitFlag) ar = CheckArg("new-instance", true); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -new-instance is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument --new-instance is invalid when argument --osint is specified\n"); return 1; } else if (ar == ARG_FOUND) { SaveToEnv("MOZ_NEW_INSTANCE=1"); } - // Handle -help and -version command line arguments. + // Handle --help and --version command line arguments. // They should return quickly, so we deal with them here. if (CheckArg("h") || CheckArg("help") || CheckArg("?")) { DumpHelp(); @@ -3283,10 +3283,10 @@ XREMain::XRE_mainInit(bool* aExitFlag) rv = XRE_InitCommandLine(gArgc, gArgv); NS_ENSURE_SUCCESS(rv, 1); - // Check for -register, which registers chrome and then exits immediately. + // Check for --register, which registers chrome and then exits immediately. ar = CheckArg("register", true); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -register is invalid when argument -osint is specified\n"); + PR_fprintf(PR_STDERR, "Error: argument --register is invalid when argument --osint is specified\n"); return 1; } else if (ar == ARG_FOUND) { ScopedXPCOMStartup xpcom; @@ -3537,7 +3537,7 @@ XREMain::XRE_mainStartup(bool* aExitFlag) #endif /* MOZ_WIDGET_GTK */ #ifdef MOZ_ENABLE_XREMOTE - // handle -remote now that xpcom is fired up + // handle --remote now that xpcom is fired up bool newInstance; { char *e = PR_GetEnv("MOZ_NO_REMOTE"); @@ -4454,7 +4454,7 @@ XRE_InitCommandLine(int aArgc, char* aArgv[]) const char *path = nullptr; ArgResult ar = CheckArg("greomni", false, &path); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -greomni requires a path argument\n"); + PR_fprintf(PR_STDERR, "Error: argument --greomni requires a path argument\n"); return NS_ERROR_FAILURE; } @@ -4464,13 +4464,13 @@ XRE_InitCommandLine(int aArgc, char* aArgv[]) nsCOMPtr greOmni; rv = XRE_GetFileFromPath(path, getter_AddRefs(greOmni)); if (NS_FAILED(rv)) { - PR_fprintf(PR_STDERR, "Error: argument -greomni requires a valid path\n"); + PR_fprintf(PR_STDERR, "Error: argument --greomni requires a valid path\n"); return rv; } ar = CheckArg("appomni", false, &path); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument -appomni requires a path argument\n"); + PR_fprintf(PR_STDERR, "Error: argument --appomni requires a path argument\n"); return NS_ERROR_FAILURE; } @@ -4478,7 +4478,7 @@ XRE_InitCommandLine(int aArgc, char* aArgv[]) if (path) { rv = XRE_GetFileFromPath(path, getter_AddRefs(appOmni)); if (NS_FAILED(rv)) { - PR_fprintf(PR_STDERR, "Error: argument -appomni requires a valid path\n"); + PR_fprintf(PR_STDERR, "Error: argument --appomni requires a valid path\n"); return rv; } } diff --git a/toolkit/xre/nsNativeAppSupportWin.cpp b/toolkit/xre/nsNativeAppSupportWin.cpp index 49d75890408..f9c9c7bac20 100644 --- a/toolkit/xre/nsNativeAppSupportWin.cpp +++ b/toolkit/xre/nsNativeAppSupportWin.cpp @@ -251,12 +251,12 @@ private: * WWW_OpenURL topic and the params as specified in the default value of the * ddeexec registry key (e.g. "%1",,0,0,,,, where '%1' is the url to open) * for the verb (e.g. open). - * 2. If the application is not running it is launched with the -requestPending - * and the -url argument. - * 2.1 If the application does not need to restart and the -requestPending + * 2. If the application is not running it is launched with the --requestPending + * and the --url argument. + * 2.1 If the application does not need to restart and the --requestPending * argument is present the accompanying url will not be used. Instead the * application will wait for the DDE message to open the url. - * 2.2 If the application needs to restart the -requestPending argument is + * 2.2 If the application needs to restart the --requestPending argument is * removed from the arguments used to restart the application and the url * will be handled normally. * @@ -278,7 +278,7 @@ public: // The "old" Start method (renamed). NS_IMETHOD StartDDE(); // Utility function to handle a Win32-specific command line - // option: "-console", which dynamically creates a Windows + // option: "--console", which dynamically creates a Windows // console. void CheckConsole(); diff --git a/webapprt/mac/webapprt.mm b/webapprt/mac/webapprt.mm index f0c4eb9c1a1..dea620e4d44 100644 --- a/webapprt/mac/webapprt.mm +++ b/webapprt/mac/webapprt.mm @@ -259,7 +259,7 @@ main(int argc, char **argv) NSString *profile = [args objectForKey:@"profile"]; if (profile) { - NSLog(@"Profile specified with -profile: %@", profile); + NSLog(@"Profile specified with --profile: %@", profile); } else { nsINIParser parser; diff --git a/webapprt/win/webapprt.cpp b/webapprt/win/webapprt.cpp index fe968593069..9dfe0adad6b 100644 --- a/webapprt/win/webapprt.cpp +++ b/webapprt/win/webapprt.cpp @@ -444,7 +444,7 @@ main(int argc, char* argv[]) return 255; } - // Check if the runtime was executed with the "-profile" argument + // Check if the runtime was executed with the "--profile" argument for (int i = 1; i < argc; i++) { if (!strcmp(argv[i], "-profile") || !strcmp(argv[i], "--profile") || diff --git a/widget/windows/winrt/MetroContracts.cpp b/widget/windows/winrt/MetroContracts.cpp index 02697c0a63f..7bb04e431af 100644 --- a/widget/windows/winrt/MetroContracts.cpp +++ b/widget/windows/winrt/MetroContracts.cpp @@ -97,7 +97,7 @@ FrameworkView::LaunchActivated(ComPtr& aArgs, bool aS if (WindowsIsStringEmpty(data.Get())) return; - // If we're being launched from a secondary tile then we have a 2nd command line param of -url + // If we're being launched from a secondary tile then we have a 2nd command line param of --url // and a third of the secondary tile. We want it in sActivationURI so that browser.js will // load it in without showing the start UI. int argc; diff --git a/xpfe/test/winopen.js b/xpfe/test/winopen.js index 8d6c3fe9bd5..11548c441d5 100644 --- a/xpfe/test/winopen.js +++ b/xpfe/test/winopen.js @@ -36,10 +36,10 @@ const options = [ [ "phase1", "PHASE_ONE", false ], // Note: You can attach search options to the url for this file to control // any of the options in the array above. E.g., specifying -// mozilla -chrome "file:///D|/mozilla/xpfe/test/winopen.xul?phase1=16&close=0" +// mozilla --chrome "file:///D|/mozilla/xpfe/test/winopen.xul?phase1=16&close=0" // will run this script with PHASE_ONE=16 and AUTOCLOSE=0. // -// On Win32, you must enclose the -chrome option in quotes in order pass funny Win32 shell +// On Win32, you must enclose the --chrome option in quotes in order pass funny Win32 shell // characters such as '&' or '|'! var opts = window.location.search.substring(1).split( '&' ); From bf89af25673f7da27e0501fec0e7c899715965db Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 23 Oct 2014 17:39:49 -0700 Subject: [PATCH 15/52] Bug 1080302 (part 3) - Convert -foo options to --foo in |mach run|. r=glandium. --- python/mozbuild/mozbuild/mach_commands.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/python/mozbuild/mozbuild/mach_commands.py b/python/mozbuild/mozbuild/mach_commands.py index 08d2c6ceb2f..b033b680e6a 100644 --- a/python/mozbuild/mozbuild/mach_commands.py +++ b/python/mozbuild/mozbuild/mach_commands.py @@ -794,14 +794,14 @@ class RunProgram(MachCommandBase): @Command('run', category='post-build', description='Run the compiled program, possibly under a debugger or DMD.') @CommandArgument('params', nargs='...', group=prog_group, - help='Command-line arguments to be passed through to the program. Not specifying a -profile or -P option will result in a temporary profile being used.') + help='Command-line arguments to be passed through to the program. Not specifying a --profile or -P option will result in a temporary profile being used.') @CommandArgumentGroup(prog_group) - @CommandArgument('-remote', '-r', action='store_true', group=prog_group, - help='Do not pass the -no-remote argument by default.') - @CommandArgument('-background', '-b', action='store_true', group=prog_group, - help='Do not pass the -foreground argument by default on Mac.') - @CommandArgument('-noprofile', '-n', action='store_true', group=prog_group, - help='Do not pass the -profile argument by default.') + @CommandArgument('--remote', '-r', action='store_true', group=prog_group, + help='Do not pass the --no-remote argument by default.') + @CommandArgument('--background', '-b', action='store_true', group=prog_group, + help='Do not pass the --foreground argument by default on Mac.') + @CommandArgument('--noprofile', '-n', action='store_true', group=prog_group, + help='Do not pass the --profile argument by default.') @CommandArgumentGroup('debugging') @CommandArgument('--debug', action='store_true', group='debugging', From 678d9ea51221da0c46fee88d4c8bb48134ec3fa7 Mon Sep 17 00:00:00 2001 From: Bobby Holley Date: Mon, 27 Oct 2014 08:31:44 +0100 Subject: [PATCH 16/52] Bug 1087824 - Bump the limits some more. r=luke --- js/xpconnect/src/XPCJSRuntime.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp index ccbf3b8200d..0553e78f56a 100644 --- a/js/xpconnect/src/XPCJSRuntime.cpp +++ b/js/xpconnect/src/XPCJSRuntime.cpp @@ -3213,15 +3213,11 @@ XPCJSRuntime::XPCJSRuntime(nsXPConnect* aXPConnect) const size_t kStackQuota = 2 * kDefaultStackQuota; const size_t kTrustedScriptBuffer = 246 * 1024; #elif defined(XP_WIN) - // 1MB is the default stack size on Windows, so use 900k. And since 32-bit - // Windows stack frames are 3.4k each, let's use a buffer of 48k and double - // that for 64-bit. - // - // Note - Frames on Win32 PGO builds seem to have grown recently, and 48k - // stacks seem about 20-30% too small - so we bump it to 64k. + // 1MB is the default stack size on Windows, so use 900k. + // Windows PGO stack frames have unfortunately gotten pretty large lately. :-( const size_t kStackQuota = 900 * 1024; - const size_t kTrustedScriptBuffer = (sizeof(size_t) == 8) ? 96 * 1024 - : 64 * 1024; + const size_t kTrustedScriptBuffer = (sizeof(size_t) == 8) ? 120 * 1024 + : 80 * 1024; // The following two configurations are linux-only. Given the numbers above, // we use 50k and 100k trusted buffers on 32-bit and 64-bit respectively. #elif defined(DEBUG) From 4b41b90c8c10277e62b13e62c9ead36ee88ad3d0 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Mon, 27 Oct 2014 08:53:13 +0100 Subject: [PATCH 17/52] No bug - Remove the executable bit from HTMLMediaElement.{h,cpp}. --- dom/html/HTMLMediaElement.cpp | 0 dom/html/HTMLMediaElement.h | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 dom/html/HTMLMediaElement.cpp mode change 100755 => 100644 dom/html/HTMLMediaElement.h diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp old mode 100755 new mode 100644 diff --git a/dom/html/HTMLMediaElement.h b/dom/html/HTMLMediaElement.h old mode 100755 new mode 100644 From deba0bcb23fd5e1e002eddf6a3e22888305d80dc Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Fri, 24 Oct 2014 21:27:46 +0200 Subject: [PATCH 18/52] Bug 1086510 - Remove set-only flags from HTMLContentSink; r=hsivonen --- dom/html/nsHTMLContentSink.cpp | 38 ---------------------------------- 1 file changed, 38 deletions(-) diff --git a/dom/html/nsHTMLContentSink.cpp b/dom/html/nsHTMLContentSink.cpp index 4bbdb6cbf38..c67f1024e96 100644 --- a/dom/html/nsHTMLContentSink.cpp +++ b/dom/html/nsHTMLContentSink.cpp @@ -173,10 +173,6 @@ protected: // yet. We want to make sure to only do this once. bool mNotifiedRootInsertion; - uint8_t mScriptEnabled : 1; - uint8_t mFramesEnabled : 1; - uint8_t unused : 6; // bits available if someone needs one - mozilla::dom::NodeInfo* mNodeInfoCache[NS_HTML_TAG_MAX + 1]; nsresult FlushTags(); @@ -724,25 +720,6 @@ NS_INTERFACE_TABLE_TAIL_INHERITING(nsContentSink) NS_IMPL_ADDREF_INHERITED(HTMLContentSink, nsContentSink) NS_IMPL_RELEASE_INHERITED(HTMLContentSink, nsContentSink) -static bool -IsScriptEnabled(nsIDocument *aDoc, nsIDocShell *aContainer) -{ - NS_ENSURE_TRUE(aDoc && aContainer, true); - - nsCOMPtr globalObject = - do_QueryInterface(aDoc->GetInnerWindow()); - - // Getting context is tricky if the document hasn't had its - // GlobalObject set yet - if (!globalObject) { - globalObject = aContainer->GetScriptGlobalObject(); - } - - NS_ENSURE_TRUE(globalObject && globalObject->GetGlobalJSObject(), true); - return nsContentUtils::GetSecurityManager()-> - ScriptAllowed(globalObject->GetGlobalJSObject()); -} - nsresult HTMLContentSink::Init(nsIDocument* aDoc, nsIURI* aURI, @@ -762,21 +739,6 @@ HTMLContentSink::Init(nsIDocument* aDoc, NS_ASSERTION(mDocShell, "oops no docshell!"); - // Find out if subframes are enabled - if (mDocShell) { - bool subFramesEnabled = true; - mDocShell->GetAllowSubframes(&subFramesEnabled); - if (subFramesEnabled) { - mFramesEnabled = true; - } - } - - // Find out if scripts are enabled, if not, show X +#errors +6: HTML start tag “nobr” in a foreign namespace context. +7: End of file seen and there were open elements. +6: Unclosed element “nobr”. +#document-fragment +svg path +#document +| +| "X" + +#data +X +#errors +12: HTML start tag “font” in a foreign namespace context. +#document-fragment +svg path +#document +| +| color="" +| "X" + +#data +X +#errors +#document-fragment +svg path +#document +| +| "X" + +#data +X +#errors +10: End tag “path” did not match the name of the current open element (“g”). +11: End of file seen and there were open elements. +3: Unclosed element “g”. +#document-fragment +svg path +#document +| +| "X" + +#data +X +#errors +5: Stray end tag “path”. +#document-fragment +svg path +#document +| "X" + +#data +X +#errors +5: Stray end tag “foreignobject”. +#document-fragment +svg foreignObject +#document +| "X" + +#data +X +#errors +5: Stray end tag “desc”. +#document-fragment +svg desc +#document +| "X" + +#data +X +#errors +5: Stray end tag “title”. +#document-fragment +svg title +#document +| "X" + +#data +X +#errors +5: Stray end tag “svg”. +#document-fragment +svg svg +#document +| "X" + +#data +X +#errors +5: Stray end tag “mfenced”. +#document-fragment +math mfenced +#document +| "X" + +#data +X +#errors +5: Stray end tag “malignmark”. +#document-fragment +math malignmark +#document +| "X" + +#data +X +#errors +5: Stray end tag “math”. +#document-fragment +math math +#document +| "X" + +#data +X +#errors +5: Stray end tag “annotation-xml”. +#document-fragment +math annotation-xml +#document +| "X" + +#data +X +#errors +5: Stray end tag “mtext”. +#document-fragment +math mtext +#document +| "X" + +#data +X +#errors +5: Stray end tag “mi”. +#document-fragment +math mi +#document +| "X" + +#data +X +#errors +5: Stray end tag “mo”. +#document-fragment +math mo +#document +| "X" + +#data +X +#errors +5: Stray end tag “mn”. +#document-fragment +math mn +#document +| "X" + +#data +X +#errors +5: Stray end tag “ms”. +#document-fragment +math ms +#document +| "X" + +#data +X +#errors +51: Self-closing syntax (“/>”) used on a non-void HTML element. Ignoring the slash and treating as a start tag. +52: End of file seen and there were open elements. +51: Unclosed element “ms”. +#document-fragment +math ms +#document +| +| +| +| +| +| +| "X" + +#data + +#errors +#document-fragment +math ms +#document +| + +#data +
+#errors +#document-fragment +math ms +#document +|
+ +#data +
+#errors +#document-fragment +math ms +#document +|
+ +#data +X +#errors +51: Self-closing syntax (“/>”) used on a non-void HTML element. Ignoring the slash and treating as a start tag. +52: End of file seen and there were open elements. +51: Unclosed element “mn”. +#document-fragment +math mn +#document +| +| +| +| +| +| +| "X" + +#data + +#errors +#document-fragment +math mn +#document +| + +#data +
+#errors +#document-fragment +math mn +#document +|
+ +#data +
+#errors +#document-fragment +math mn +#document +|
+ +#data +X +#errors +51: Self-closing syntax (“/>”) used on a non-void HTML element. Ignoring the slash and treating as a start tag. +52: End of file seen and there were open elements. +51: Unclosed element “mo”. +#document-fragment +math mo +#document +| +| +| +| +| +| +| "X" + +#data + +#errors +#document-fragment +math mo +#document +| + +#data +
+#errors +#document-fragment +math mo +#document +|
+ +#data +
+#errors +#document-fragment +math mo +#document +|
+ +#data +X +#errors +51: Self-closing syntax (“/>”) used on a non-void HTML element. Ignoring the slash and treating as a start tag. +52: End of file seen and there were open elements. +51: Unclosed element “mi”. +#document-fragment +math mi +#document +| +| +| +| +| +| +| "X" + +#data + +#errors +#document-fragment +math mi +#document +| + +#data +
+#errors +#document-fragment +math mi +#document +|
+ +#data +
+#errors +#document-fragment +math mi +#document +|
+ +#data +X +#errors +51: Self-closing syntax (“/>”) used on a non-void HTML element. Ignoring the slash and treating as a start tag. +52: End of file seen and there were open elements. +51: Unclosed element “mtext”. +#document-fragment +math mtext +#document +| +| +| +| +| +| +| "X" + +#data + +#errors +#document-fragment +math mtext +#document +| + +#data +
+#errors +#document-fragment +math mtext +#document +|
+ +#data +
+#errors +#document-fragment +math mtext +#document +|
+ +#data +
+#errors +5: HTML start tag “div” in a foreign namespace context. +#document-fragment +math annotation-xml +#document +| + +#data +
+#errors +#document-fragment +math annotation-xml +#document +| + +#data +
+#errors +5: HTML start tag “div” in a foreign namespace context. +#document-fragment +math math +#document +| + +#data +
+#errors +#document-fragment +math math +#document +| + +#data +
+#errors +#document-fragment +svg foreignObject +#document +|
+ +#data +
+#errors +#document-fragment +svg foreignObject +#document +|
+ +#data +
+#errors +#document-fragment +svg title +#document +|
+ +#data +
+#errors +#document-fragment +svg title +#document +|
+ +#data +
+#errors +#document-fragment +svg desc +#document +|
+ +#data +

X

+#errors +5: HTML start tag “div” in a foreign namespace context. +9: HTML start tag “h1” in a foreign namespace context. +#document-fragment +svg svg +#document +| +| +| "X" + +#data +
+#errors +5: HTML start tag “div” in a foreign namespace context. +#document-fragment +svg svg +#document +| + +#data +
+#errors +#document-fragment +svg desc +#document +|
+ +#data +
+#errors +#document-fragment +svg desc +#document +|
+ +#data +<foo> +#errors +16: End of file seen and there were open elements. +11: Unclosed element “plaintext”. +#document-fragment +svg desc +#document +| <plaintext> +| "<foo>" + +#data +<frameset>X +#errors +6: Stray start tag “frameset”. +#document-fragment +svg desc +#document +| "X" + +#data +<head>X +#errors +6: Stray start tag “head”. +#document-fragment +svg desc +#document +| "X" + +#data +<body>X +#errors +6: Stray start tag “body”. +#document-fragment +svg desc +#document +| "X" + +#data +<html>X +#errors +6: Stray start tag “html”. +#document-fragment +svg desc +#document +| "X" + +#data +<html class="foo">X +#errors +6: Stray start tag “html”. +#document-fragment +svg desc +#document +| "X" + +#data +<body class="foo">X +#errors +6: Stray start tag “body”. +#document-fragment +svg desc +#document +| "X" diff --git a/parser/htmlparser/tests/mochitest/mochitest.ini b/parser/htmlparser/tests/mochitest/mochitest.ini index 0ca5b2e71cf..490206cb11e 100644 --- a/parser/htmlparser/tests/mochitest/mochitest.ini +++ b/parser/htmlparser/tests/mochitest/mochitest.ini @@ -50,6 +50,7 @@ support-files = html5lib_tree_construction/domjs-unsafe.dat html5lib_tree_construction/entities01.dat html5lib_tree_construction/entities02.dat + html5lib_tree_construction/foreign-fragment.dat html5lib_tree_construction/html5test-com.dat html5lib_tree_construction/inbody01.dat html5lib_tree_construction/isindex.dat diff --git a/parser/htmlparser/tests/mochitest/parser_web_testrunner.js b/parser/htmlparser/tests/mochitest/parser_web_testrunner.js index aad59dc0349..9428a53942d 100644 --- a/parser/htmlparser/tests/mochitest/parser_web_testrunner.js +++ b/parser/htmlparser/tests/mochitest/parser_web_testrunner.js @@ -76,8 +76,17 @@ function makeFragmentTestChecker(input, fragment, testframe) { return function () { - var context = document.createElementNS("http://www.w3.org/1999/xhtml", - fragment); + var context; + if (fragment.startsWith("svg ")) { + context = document.createElementNS("http://www.w3.org/2000/svg", + fragment.substring(4)); + } else if (fragment.startsWith("math ")) { + context = document.createElementNS("http://www.w3.org/1998/Math/MathML", + fragment.substring(5)); + } else { + context = document.createElementNS("http://www.w3.org/1999/xhtml", + fragment); + } context.innerHTML = input; var domAsString = fragmentToTestOutput(context); is(domAsString, expected, "HTML5 expected success. " + new Date()); diff --git a/parser/htmlparser/tests/mochitest/test_html5_tree_construction_part2.html b/parser/htmlparser/tests/mochitest/test_html5_tree_construction_part2.html index 2ad1dc91f37..70b36673eb2 100644 --- a/parser/htmlparser/tests/mochitest/test_html5_tree_construction_part2.html +++ b/parser/htmlparser/tests/mochitest/test_html5_tree_construction_part2.html @@ -39,6 +39,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=366936 "webkit01.dat", "webkit02.dat", "main-element.dat", + "foreign-fragment.dat", "ruby.dat"]; </script> <script type="application/javascript;version=1.7" From 4e7a5ee9960b31121546d8cc5d3e711b3d441c54 Mon Sep 17 00:00:00 2001 From: Henri Sivonen <hsivonen@hsivonen.fi> Date: Mon, 27 Oct 2014 11:48:11 +0200 Subject: [PATCH 24/52] Bug 886390 part - Adjust namespace expectations for SVG and MathML on a previous innerHTML test. r=wchen. --- dom/base/test/test_bug811701.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dom/base/test/test_bug811701.html b/dom/base/test/test_bug811701.html index d4edb658b2e..70c5abe0b4b 100644 --- a/dom/base/test/test_bug811701.html +++ b/dom/base/test/test_bug811701.html @@ -26,7 +26,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=811701 is(math.outerHTML, "<math><mtext>test</mtext></math>", "<math> should have innerHTML"); math.innerHTML = "<mo>+</mo>"; - is(math.firstChild.namespaceURI, "http://www.w3.org/1999/xhtml", + is(math.firstChild.namespaceURI, "http://www.w3.org/1998/Math/MathML", "Should have the right namespace after setting innerHTML on <math>"); var polygon = document.querySelector("polygon"); @@ -41,8 +41,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=811701 var svg = document.querySelector("svg"); svg.innerHTML = "<rect/>"; - is(svg.firstChild.namespaceURI, "http://www.w3.org/1999/xhtml", - "Should have the right namespace after setting innerHTML on <math>"); + is(svg.firstChild.namespaceURI, "http://www.w3.org/2000/svg", + "Should have the right namespace after setting innerHTML on <svg>"); </script> </body> </html> From 7aa84035250911151b333e6932d7c076adfe4c6f Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe <hiikezoe@mozilla-japan.org> Date: Wed, 22 Oct 2014 07:18:00 +0200 Subject: [PATCH 25/52] Bug 1084997 - Replace '\' in MOZ_BUILD_APP with '/' to eliminate the difference between windows and others. r=glandium --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 1ca411ef6a3..0835c671e2c 100644 --- a/configure.in +++ b/configure.in @@ -4005,7 +4005,7 @@ else # Support comm-central. if test -n "$EXTERNAL_SOURCE_DIR" ; then MOZ_BUILD_APP="$EXTERNAL_SOURCE_DIR/$MOZ_BUILD_APP" - MOZ_BUILD_APP=`${PYTHON} -c "import os.path; print(os.path.relpath(\"${MOZ_BUILD_APP}\", \"${srcdir}\"))"` + MOZ_BUILD_APP=`${PYTHON} -c "import mozpack.path as mozpath; print(mozpath.relpath(\"${MOZ_BUILD_APP}\", \"${srcdir}\"))"` fi # We have a valid application only if it has a build.mk file in its top # directory. From 98a611eb5e74b3627d7297a7c0c71676e7cdbe1f Mon Sep 17 00:00:00 2001 From: Morris Tseng <mtseng@mozilla.com> Date: Wed, 22 Oct 2014 20:03:00 +0200 Subject: [PATCH 26/52] Bug 1074736 - selection_rect_list should consider multiple range. r=mdas --- .../marionette/client/marionette/selection.py | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/testing/marionette/client/marionette/selection.py b/testing/marionette/client/marionette/selection.py index dbdd7c19ae0..714586652f1 100644 --- a/testing/marionette/client/marionette/selection.py +++ b/testing/marionette/client/marionette/selection.py @@ -73,16 +73,22 @@ class SelectionManager(object): self.element.marionette.execute_script(cmd, script_args=[self.element]) - def selection_rect_list(self): - '''Return the selection's DOMRectList object. + def selection_rect_list(self, idx): + '''Return the selection's DOMRectList object for the range at given idx. - If the element is either <input> or <textarea>, return the selection's - DOMRectList within the element. Otherwise, return the DOMRectList of the - current selection. + If the element is either <input> or <textarea>, return the DOMRectList of + the range at given idx of the selection within the element. Otherwise, + return the DOMRectList of the of the range at given idx of current selection. ''' cmd = self.js_selection_cmd() +\ - '''return sel.getRangeAt(0).getClientRects();''' + '''return sel.getRangeAt(%d).getClientRects();''' % idx + return self.element.marionette.execute_script(cmd, script_args=[self.element]) + + def range_count(self): + '''Get selection's range count''' + cmd = self.js_selection_cmd() +\ + '''return sel.rangeCount;''' return self.element.marionette.execute_script(cmd, script_args=[self.element]) def _selection_location_helper(self, location_type): @@ -94,9 +100,11 @@ class SelectionManager(object): considered. ''' - rect_list = self.selection_rect_list() - list_length = rect_list['length'] - first_rect, last_rect = rect_list['0'], rect_list[str(list_length - 1)] + range_count = self.range_count(); + first_rect_list = self.selection_rect_list(0) + last_rect_list = self.selection_rect_list(range_count - 1) + last_list_length = last_rect_list['length'] + first_rect, last_rect = first_rect_list['0'], last_rect_list[str(last_list_length - 1)] origin_x, origin_y = self.element.location['x'], self.element.location['y'] if self.element.get_attribute('dir') == 'rtl': # such as Arabic From 547c9ef4f387bb68856055c13e89a80dc4f4f7bf Mon Sep 17 00:00:00 2001 From: Morris Tseng <mtseng@mozilla.com> Date: Thu, 23 Oct 2014 19:49:00 +0200 Subject: [PATCH 27/52] Bug 1074736 - Consider multiple range selection in selection caret. r=roc --- dom/base/nsGlobalWindow.cpp | 37 ++++++++++++-------- layout/base/SelectionCarets.cpp | 61 +++++++++++++++++---------------- 2 files changed, 54 insertions(+), 44 deletions(-) diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index 2be70f802c4..29750d898aa 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -9355,21 +9355,30 @@ nsGlobalWindow::UpdateCommands(const nsAString& anAction, nsISelection* aSel, in SelectionChangeEventInit init; init.mBubbles = true; if (aSel) { - nsCOMPtr<nsIDOMRange> range; - nsresult rv = aSel->GetRangeAt(0, getter_AddRefs(range)); - if (NS_SUCCEEDED(rv) && range) { - nsRefPtr<nsRange> nsrange = static_cast<nsRange*>(range.get()); - init.mBoundingClientRect = nsrange->GetBoundingClientRect(true, false); - range->ToString(init.mSelectedText); + Selection* selection = static_cast<Selection*>(aSel); + int32_t rangeCount = selection->GetRangeCount(); + nsLayoutUtils::RectAccumulator accumulator; + for (int32_t idx = 0; idx < rangeCount; ++idx) { + nsRange* range = selection->GetRangeAt(idx); + nsRange::CollectClientRects(&accumulator, range, + range->GetStartParent(), range->StartOffset(), + range->GetEndParent(), range->EndOffset(), + true, false); + } + nsRect rect = accumulator.mResultRect.IsEmpty() ? accumulator.mFirstRect : + accumulator.mResultRect; + nsRefPtr<DOMRect> domRect = new DOMRect(ToSupports(this)); + domRect->SetLayoutRect(rect); + init.mBoundingClientRect = domRect; - for (uint32_t reasonType = 0; - reasonType < static_cast<uint32_t>(SelectionChangeReason::EndGuard_); - ++reasonType) { - SelectionChangeReason strongReasonType = - static_cast<SelectionChangeReason>(reasonType); - if (CheckReason(aReason, strongReasonType)) { - init.mReasons.AppendElement(strongReasonType); - } + selection->Stringify(init.mSelectedText); + for (uint32_t reasonType = 0; + reasonType < static_cast<uint32_t>(SelectionChangeReason::EndGuard_); + ++reasonType) { + SelectionChangeReason strongReasonType = + static_cast<SelectionChangeReason>(reasonType); + if (CheckReason(aReason, strongReasonType)) { + init.mReasons.AppendElement(strongReasonType); } } diff --git a/layout/base/SelectionCarets.cpp b/layout/base/SelectionCarets.cpp index 4f7376fa483..3ec9852afe7 100644 --- a/layout/base/SelectionCarets.cpp +++ b/layout/base/SelectionCarets.cpp @@ -384,21 +384,24 @@ SelectionCarets::UpdateSelectionCarets() return; } - if (selection->GetRangeCount() <= 0) { + if (selection->IsCollapsed()) { SetVisibility(false); return; } - nsRefPtr<nsRange> range = selection->GetRangeAt(0); - if (range->Collapsed()) { - SetVisibility(false); - return; - } + int32_t rangeCount = selection->GetRangeCount(); + nsRefPtr<nsRange> firstRange = selection->GetRangeAt(0); + nsRefPtr<nsRange> lastRange = selection->GetRangeAt(rangeCount - 1); - nsLayoutUtils::FirstAndLastRectCollector collector; - nsRange::CollectClientRects(&collector, range, - range->GetStartParent(), range->StartOffset(), - range->GetEndParent(), range->EndOffset(), true, true); + nsLayoutUtils::FirstAndLastRectCollector collectorStart; + nsRange::CollectClientRects(&collectorStart, firstRange, + firstRange->GetStartParent(), firstRange->StartOffset(), + firstRange->GetEndParent(), firstRange->EndOffset(), true, true); + + nsLayoutUtils::FirstAndLastRectCollector collectorEnd; + nsRange::CollectClientRects(&collectorEnd, lastRange, + lastRange->GetStartParent(), lastRange->StartOffset(), + lastRange->GetEndParent(), lastRange->EndOffset(), true, true); nsIFrame* canvasFrame = mPresShell->GetCanvasFrame(); nsIFrame* rootFrame = mPresShell->GetRootFrame(); @@ -412,11 +415,11 @@ SelectionCarets::UpdateSelectionCarets() nsRefPtr<nsFrameSelection> fs = GetFrameSelection(); int32_t startOffset; nsIFrame* startFrame = FindFirstNodeWithFrame(mPresShell->GetDocument(), - range, fs, false, startOffset); + firstRange, fs, false, startOffset); int32_t endOffset; nsIFrame* endFrame = FindFirstNodeWithFrame(mPresShell->GetDocument(), - range, fs, true, endOffset); + lastRange, fs, true, endOffset); if (!startFrame || !endFrame) { SetVisibility(false); @@ -442,15 +445,15 @@ SelectionCarets::UpdateSelectionCarets() // If start frame is LTR, then place start caret in first rect's leftmost // otherwise put it to first rect's rightmost. - ReduceRectToVerticalEdge(collector.mFirstRect, startFrameIsRTL); + ReduceRectToVerticalEdge(collectorStart.mFirstRect, startFrameIsRTL); // Contrary to start frame, if end frame is LTR, put end caret to last // rect's rightmost position, otherwise, put it to last rect's leftmost. - ReduceRectToVerticalEdge(collector.mLastRect, !endFrameIsRTL); + ReduceRectToVerticalEdge(collectorEnd.mLastRect, !endFrameIsRTL); nsAutoTArray<nsIFrame*, 16> hitFramesInFirstRect; nsLayoutUtils::GetFramesForArea(rootFrame, - collector.mFirstRect, + collectorStart.mFirstRect, hitFramesInFirstRect, nsLayoutUtils::IGNORE_PAINT_SUPPRESSION | nsLayoutUtils::IGNORE_CROSS_DOC | @@ -458,7 +461,7 @@ SelectionCarets::UpdateSelectionCarets() nsAutoTArray<nsIFrame*, 16> hitFramesInLastRect; nsLayoutUtils::GetFramesForArea(rootFrame, - collector.mLastRect, + collectorEnd.mLastRect, hitFramesInLastRect, nsLayoutUtils::IGNORE_PAINT_SUPPRESSION | nsLayoutUtils::IGNORE_CROSS_DOC | @@ -467,11 +470,11 @@ SelectionCarets::UpdateSelectionCarets() SetStartFrameVisibility(hitFramesInFirstRect.Contains(startFrame)); SetEndFrameVisibility(hitFramesInLastRect.Contains(endFrame)); - nsLayoutUtils::TransformRect(rootFrame, canvasFrame, collector.mFirstRect); - nsLayoutUtils::TransformRect(rootFrame, canvasFrame, collector.mLastRect); + nsLayoutUtils::TransformRect(rootFrame, canvasFrame, collectorStart.mFirstRect); + nsLayoutUtils::TransformRect(rootFrame, canvasFrame, collectorEnd.mLastRect); - SetStartFramePos(collector.mFirstRect.BottomLeft()); - SetEndFramePos(collector.mLastRect.BottomRight()); + SetStartFramePos(collectorStart.mFirstRect.BottomLeft()); + SetEndFramePos(collectorEnd.mLastRect.BottomRight()); SetVisibility(true); // If range select only one character, append tilt class name to it. @@ -689,11 +692,13 @@ SelectionCarets::DragSelection(const nsPoint &movePoint) } nsRefPtr<dom::Selection> selection = GetSelection(); - if (selection->GetRangeCount() <= 0) { + int32_t rangeCount = selection->GetRangeCount(); + if (rangeCount <= 0) { return nsEventStatus_eConsumeNoDefault; } - nsRefPtr<nsRange> range = selection->GetRangeAt(0); + nsRefPtr<nsRange> range = mDragMode == START_FRAME ? + selection->GetRangeAt(0) : selection->GetRangeAt(rangeCount - 1); if (!CompareRangeWithContentOffset(range, fs, offsets, mDragMode)) { return nsEventStatus_eConsumeNoDefault; } @@ -737,20 +742,22 @@ SelectionCarets::GetCaretYCenterPosition() } nsRefPtr<dom::Selection> selection = GetSelection(); - if (selection->GetRangeCount() <= 0) { + int32_t rangeCount = selection->GetRangeCount(); + if (rangeCount <= 0) { return 0; } - nsRefPtr<nsRange> range = selection->GetRangeAt(0); nsRefPtr<nsFrameSelection> fs = GetFrameSelection(); MOZ_ASSERT(mDragMode != NONE); nsCOMPtr<nsIContent> node; uint32_t nodeOffset; if (mDragMode == START_FRAME) { + nsRefPtr<nsRange> range = selection->GetRangeAt(0); node = do_QueryInterface(range->GetStartParent()); nodeOffset = range->StartOffset(); } else { + nsRefPtr<nsRange> range = selection->GetRangeAt(rangeCount - 1); node = do_QueryInterface(range->GetEndParent()); nodeOffset = range->EndOffset(); } @@ -885,12 +892,6 @@ SelectionCarets::NotifySelectionChanged(nsIDOMDocument* aDoc, nsISelection* aSel, int16_t aReason) { - bool isCollapsed; - aSel->GetIsCollapsed(&isCollapsed); - if (isCollapsed) { - SetVisibility(false); - return NS_OK; - } if (!aReason || (aReason & (nsISelectionListener::DRAG_REASON | nsISelectionListener::KEYPRESS_REASON | nsISelectionListener::MOUSEDOWN_REASON))) { From a15cf8e2136b9cab52775d64e321dc6f549e798e Mon Sep 17 00:00:00 2001 From: Morris Tseng <mtseng@mozilla.com> Date: Sun, 26 Oct 2014 20:47:00 +0100 Subject: [PATCH 28/52] Bug 1074736 - Marionette test for selection carets with multiple range support. r=mdas --- layout/base/tests/marionette/manifest.ini | 1 + .../test_selectioncarets_multiplerange.py | 108 ++++++++++++++++++ .../test_selectioncarets_multiplerange.html | 19 +++ 3 files changed, 128 insertions(+) create mode 100644 layout/base/tests/marionette/test_selectioncarets_multiplerange.py create mode 100644 testing/marionette/client/marionette/www/test_selectioncarets_multiplerange.html diff --git a/layout/base/tests/marionette/manifest.ini b/layout/base/tests/marionette/manifest.ini index 8f9f6706953..bb946e97205 100644 --- a/layout/base/tests/marionette/manifest.ini +++ b/layout/base/tests/marionette/manifest.ini @@ -13,3 +13,4 @@ skip = false [test_touchcaret.py] [test_selectioncarets.py] +[test_selectioncarets_multiplerange.py] diff --git a/layout/base/tests/marionette/test_selectioncarets_multiplerange.py b/layout/base/tests/marionette/test_selectioncarets_multiplerange.py new file mode 100644 index 00000000000..a0c995cecbc --- /dev/null +++ b/layout/base/tests/marionette/test_selectioncarets_multiplerange.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# 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/. + +from by import By +from marionette import Actions +from marionette_test import MarionetteTestCase +from selection import SelectionManager + + +class SelectionCaretsMultipleRangeTest(MarionetteTestCase): + _long_press_time = 1 # 1 second + + def setUp(self): + # Code to execute before a tests are run. + MarionetteTestCase.setUp(self) + self.actions = Actions(self.marionette) + + def openTestHtml(self, enabled=True): + # Open html for testing and enable selectioncaret and + # non-editable support + self.marionette.execute_script( + 'SpecialPowers.setBoolPref("selectioncaret.enabled", %s);' % + ('true' if enabled else 'false')) + self.marionette.execute_script( + 'SpecialPowers.setBoolPref("selectioncaret.noneditable", %s);' % + ('true' if enabled else 'false')) + + test_html = self.marionette.absolute_url('test_selectioncarets_multiplerange.html') + self.marionette.navigate(test_html) + + self._body = self.marionette.find_element(By.ID, 'bd') + self._sel3 = self.marionette.find_element(By.ID, 'sel3') + self._sel4 = self.marionette.find_element(By.ID, 'sel4') + self._sel6 = self.marionette.find_element(By.ID, 'sel6') + self._nonsel1 = self.marionette.find_element(By.ID, 'nonsel1') + + def _long_press_without_contextmenu(self, el, x, y): + return self.actions.press(el, x, y).move_by_offset(0, 0).\ + wait(self._long_press_time).release() + + def _long_press_to_select_word(self, el, wordOrdinal): + sel = SelectionManager(el) + original_content = sel.content + words = original_content.split() + self.assertTrue(wordOrdinal < len(words), + 'Expect at least %d words in the content.' % wordOrdinal) + + # Calc offset + offset = 0 + for i in range(wordOrdinal): + offset += (len(words[i]) + 1) + + # Move caret inside the word. + el.tap() + sel.move_caret_to_front() + sel.move_caret_by_offset(offset) + x, y = sel.caret_location() + + # Long press the caret position. Selection carets should appear, and the + # word will be selected. On Windows, those spaces after the word + # will also be selected. + self._long_press_without_contextmenu(el, x, y).perform() + + def _to_unix_line_ending(self, s): + """Changes all Windows/Mac line endings in s to UNIX line endings.""" + + return s.replace('\r\n', '\n').replace('\r', '\n') + + def test_long_press_to_select_non_selectable_word(self): + '''Testing long press on non selectable field. + We should not select anything when long press on non selectable fields.''' + + self.openTestHtml(enabled=True) + halfY = self._nonsel1.size['height'] / 2 + self._long_press_without_contextmenu(self._nonsel1, 0, halfY).perform() + sel = SelectionManager(self._nonsel1) + range_count = sel.range_count() + self.assertEqual(range_count, 0) + + def test_drag_caret_over_non_selectable_field(self): + '''Testing drag caret over non selectable field. + So that the selected content should exclude non selectable field and + end selection caret should appear in last range's position.''' + self.openTestHtml(enabled=True) + + # Select target element and get target caret location + self._long_press_to_select_word(self._sel4, 3) + sel = SelectionManager(self._body) + (_, _), (end_caret_x, end_caret_y) = sel.selection_carets_location() + + self._long_press_to_select_word(self._sel6, 0) + (_, _), (end_caret2_x, end_caret2_y) = sel.selection_carets_location() + + # Select start element + self._long_press_to_select_word(self._sel3, 3) + + # Drag end caret to target location + (caret1_x, caret1_y), (caret2_x, caret2_y) = sel.selection_carets_location() + self.actions.flick(self._body, caret2_x, caret2_y, end_caret_x, end_caret_y).perform() + self.assertEqual(self._to_unix_line_ending(sel.selected_content.strip()), + 'this 3\nuser can select this') + + (caret1_x, caret1_y), (caret2_x, caret2_y) = sel.selection_carets_location() + self.actions.flick(self._body, caret2_x, caret2_y, end_caret2_x, end_caret2_y).perform() + self.assertEqual(self._to_unix_line_ending(sel.selected_content.strip()), + 'this 3\nuser can select this 4\nuser can select this 5\nuser') diff --git a/testing/marionette/client/marionette/www/test_selectioncarets_multiplerange.html b/testing/marionette/client/marionette/www/test_selectioncarets_multiplerange.html new file mode 100644 index 00000000000..394630c1fa1 --- /dev/null +++ b/testing/marionette/client/marionette/www/test_selectioncarets_multiplerange.html @@ -0,0 +1,19 @@ +<html> +<style> +h4 { + -moz-user-select: none; +} +</style> +<body id=bd> +<h3 id=sel1>user can select this 1</h3> +<h3 id=sel2>user can select this 2</h3> +<h3 id=sel3>user can select this 3</h3> +<h4 id=nonsel1>user cannot select this 1</h4> +<h4 id=nonsel2>user cannot select this 2</h4> +<h3 id=sel4>user can select this 4</h3> +<h3 id=sel5>user can select this 5</h3> +<h4 id=nonsel3>user cannot select this 3</h4> +<h3 id=sel6>user can select this 6</h3> +<h3 id=sel7>user can select this 7</h3> +</body> +</html> From e95ac7fcd98ea300a44bdbbb3f5733fedfba0458 Mon Sep 17 00:00:00 2001 From: Gervase Markham <gerv@gerv.net> Date: Fri, 24 Oct 2014 08:55:00 +0200 Subject: [PATCH 29/52] Bug 1069069 - update .pl entry in PSL. r=tobias.sattler --- netwerk/dns/effective_tld_names.dat | 55 +++++++++++++---------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat index a62953c8da3..6a8759c285f 100644 --- a/netwerk/dns/effective_tld_names.dat +++ b/netwerk/dns/effective_tld_names.dat @@ -5256,27 +5256,30 @@ gop.pk gos.pk info.pk -// pl : http://www.dns.pl/english/ +// pl http://www.dns.pl/english/index.html +// confirmed on 26.09.2014 from Bogna Tchórzewska <partner@dns.pl> pl -// NASK functional domains (nask.pl / dns.pl) : http://www.dns.pl/english/dns-funk.html +com.pl +net.pl +org.pl +info.pl +waw.pl +gov.pl +// pl functional domains (http://www.dns.pl/english/index.html) aid.pl agro.pl atm.pl auto.pl biz.pl -com.pl edu.pl gmina.pl gsm.pl -info.pl mail.pl miasta.pl media.pl mil.pl -net.pl nieruchomosci.pl nom.pl -org.pl pc.pl powiat.pl priv.pl @@ -5292,12 +5295,7 @@ tm.pl tourism.pl travel.pl turystyka.pl -// ICM functional domains (icm.edu.pl) -6bone.pl -art.pl -mbone.pl // Government domains (administred by ippt.gov.pl) -gov.pl uw.gov.pl um.gov.pl ug.gov.pl @@ -5307,11 +5305,7 @@ so.gov.pl sr.gov.pl po.gov.pl pa.gov.pl -// other functional domains -ngo.pl -irc.pl -usenet.pl -// NASK geographical domains : http://www.dns.pl/english/dns-regiony.html +// pl regional domains (http://www.dns.pl/english/index.html) augustow.pl babia-gora.pl bedzin.pl @@ -5397,7 +5391,6 @@ rybnik.pl rzeszow.pl sanok.pl sejny.pl -siedlce.pl slask.pl slupsk.pl sosnowiec.pl @@ -5419,7 +5412,6 @@ ustka.pl walbrzych.pl warmia.pl warszawa.pl -waw.pl wegrow.pl wielun.pl wlocl.pl @@ -5432,18 +5424,6 @@ zagan.pl zarow.pl zgora.pl zgorzelec.pl -// TASK geographical domains (www.task.gda.pl/uslugi/dns) -gda.pl -gdansk.pl -gdynia.pl -med.pl -sopot.pl -// other geographical domains -gliwice.pl -krakow.pl -poznan.pl -wroc.pl -zakopane.pl // pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf pm @@ -8790,6 +8770,14 @@ operaunite.com // Submitted by Duarte Santos <domain-admin@outsystemscloud.com> 2014-03-11 outsystemscloud.com +// .pl domains (grandfathered) +art.pl +gliwice.pl +krakow.pl +poznan.pl +wroc.pl +zakopane.pl + // Red Hat, Inc. OpenShift : https://openshift.redhat.com/ // Submitted by Tim Kramer <tkramer@rhcloud.com> 2012-10-24 rhcloud.com @@ -8802,6 +8790,13 @@ service.gov.uk // Submitted by registry <lendl@nic.at> 2008-06-09 priv.at +// TASK geographical domains (www.task.gda.pl/uslugi/dns) +gda.pl +gdansk.pl +gdynia.pl +med.pl +sopot.pl + // Yola : https://www.yola.com/ // Submitted by Stefano Rivera <stefano@yola.com> 2014-07-09 yolasite.com From 6bc92532718c4669447bf83ebdfe4daebaf688cd Mon Sep 17 00:00:00 2001 From: Benjamin Chen <bechen@mozilla.com> Date: Fri, 24 Oct 2014 17:25:45 +0800 Subject: [PATCH 30/52] Bug 1062134 - Freeze decoding when back from Dormant state. r=jwwang --- dom/media/MediaDecoderStateMachine.cpp | 26 +++++++++++++++++++++++--- dom/media/MediaDecoderStateMachine.h | 11 +++++++++++ dom/media/omx/RtspMediaCodecReader.cpp | 12 ------------ dom/media/omx/RtspMediaCodecReader.h | 2 -- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/dom/media/MediaDecoderStateMachine.cpp b/dom/media/MediaDecoderStateMachine.cpp index acf9f29a94e..d3a22c515fd 100644 --- a/dom/media/MediaDecoderStateMachine.cpp +++ b/dom/media/MediaDecoderStateMachine.cpp @@ -213,7 +213,9 @@ MediaDecoderStateMachine::MediaDecoderStateMachine(MediaDecoder* aDecoder, mDropVideoUntilNextDiscontinuity(false), mDecodeToSeekTarget(false), mCurrentTimeBeforeSeek(0), - mLastFrameStatus(MediaDecoderOwner::NEXT_FRAME_UNINITIALIZED) + mLastFrameStatus(MediaDecoderOwner::NEXT_FRAME_UNINITIALIZED), + mDecodingFrozenAtStateMetadata(false), + mDecodingFrozenAtStateDecoding(false) { MOZ_COUNT_CTOR(MediaDecoderStateMachine); NS_ASSERTION(NS_IsMainThread(), "Should be on main thread."); @@ -1356,8 +1358,9 @@ void MediaDecoderStateMachine::SetDormant(bool aDormant) SetState(DECODER_STATE_DORMANT); mDecoder->GetReentrantMonitor().NotifyAll(); } else if ((aDormant != true) && (mState == DECODER_STATE_DORMANT)) { + mDecodingFrozenAtStateMetadata = true; + mDecodingFrozenAtStateDecoding = true; ScheduleStateMachine(); - mStartTime = 0; mCurrentFrameTime = 0; SetState(DECODER_STATE_DECODING_NONE); mDecoder->GetReentrantMonitor().NotifyAll(); @@ -1454,6 +1457,10 @@ void MediaDecoderStateMachine::Play() SetState(DECODER_STATE_DECODING); mDecodeStartTime = TimeStamp::Now(); } + if (mDecodingFrozenAtStateDecoding) { + mDecodingFrozenAtStateDecoding = false; + DispatchDecodeTasksIfNeeded(); + } // Once we start playing, we don't want to minimize our prerolling, as we // assume the user is likely to want to keep playing in future. mMinimizePreroll = false; @@ -1515,6 +1522,8 @@ void MediaDecoderStateMachine::Seek(const SeekTarget& aTarget) NS_ASSERTION(NS_IsMainThread(), "Should be on main thread."); ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor()); + mDecodingFrozenAtStateDecoding = false; + if (mState == DECODER_STATE_SHUTDOWN) { return; } @@ -1622,6 +1631,11 @@ MediaDecoderStateMachine::DispatchDecodeTasksIfNeeded() return; } + if (mState == DECODER_STATE_DECODING && mDecodingFrozenAtStateDecoding) { + DECODER_LOG("DispatchDecodeTasksIfNeeded return due to " + "mFreezeDecodingAtStateDecoding"); + return; + } // NeedToDecodeAudio() can go from false to true while we hold the // monitor, but it can't go from true to false. This can happen because // NeedToDecodeAudio() takes into account the amount of decoded audio @@ -1972,6 +1986,10 @@ nsresult MediaDecoderStateMachine::DecodeMetadata() SetStartTime(0); res = FinishDecodeMetadata(); NS_ENSURE_SUCCESS(res, res); + } else if (mDecodingFrozenAtStateMetadata) { + SetStartTime(mStartTime); + res = FinishDecodeMetadata(); + NS_ENSURE_SUCCESS(res, res); } else { if (HasAudio()) { ReentrantMonitorAutoExit unlock(mDecoder->GetReentrantMonitor()); @@ -1997,7 +2015,7 @@ MediaDecoderStateMachine::FinishDecodeMetadata() return NS_ERROR_FAILURE; } - if (!mScheduler->IsRealTime()) { + if (!mScheduler->IsRealTime() && !mDecodingFrozenAtStateMetadata) { const VideoData* v = VideoQueue().PeekFront(); const AudioData* a = AudioQueue().PeekFront(); @@ -2029,6 +2047,8 @@ MediaDecoderStateMachine::FinishDecodeMetadata() mStartTime, mEndTime, GetDuration(), mDecoder->IsTransportSeekable(), mDecoder->IsMediaSeekable()); + mDecodingFrozenAtStateMetadata = false; + if (HasAudio() && !HasVideo()) { // We're playing audio only. We don't need to worry about slow video // decodes causing audio underruns, so don't buffer so much audio in diff --git a/dom/media/MediaDecoderStateMachine.h b/dom/media/MediaDecoderStateMachine.h index 5d89d3a11da..d06b2c621ee 100644 --- a/dom/media/MediaDecoderStateMachine.h +++ b/dom/media/MediaDecoderStateMachine.h @@ -921,6 +921,17 @@ protected: mozilla::MediaMetadataManager mMetadataManager; MediaDecoderOwner::NextFrameStatus mLastFrameStatus; + + // True if we are back from DECODER_STATE_DORMANT state, and we can skip + // SetStartTime because the mStartTime already set before. Also we don't need + // to decode any audio/video since the MediaDecoder will trigger a seek + // operation soon. + // mDecodingFrozenAtStateMetadata: turn on/off at + // SetDormant/FinishDecodeMetadata. + // mDecodingFrozenAtStateDecoding: turn on/off at + // SetDormant/Seek,Play. + bool mDecodingFrozenAtStateMetadata; + bool mDecodingFrozenAtStateDecoding; }; } // namespace mozilla; diff --git a/dom/media/omx/RtspMediaCodecReader.cpp b/dom/media/omx/RtspMediaCodecReader.cpp index 86466acf848..fe5547ea754 100644 --- a/dom/media/omx/RtspMediaCodecReader.cpp +++ b/dom/media/omx/RtspMediaCodecReader.cpp @@ -101,16 +101,4 @@ RtspMediaCodecReader::ReadMetadata(MediaInfo* aInfo, return rv; } -// Called on Binder thread. -void -RtspMediaCodecReader::codecReserved(Track& aTrack) -{ - // TODO: fix me, we need a SeekTime(0) here because the - // MediaDecoderStateMachine will update the mStartTime after ReadMetadata. - MediaCodecReader::codecReserved(aTrack); - if (aTrack.mCodec != nullptr) { - mRtspResource->SeekTime(0); - } -} - } // namespace mozilla diff --git a/dom/media/omx/RtspMediaCodecReader.h b/dom/media/omx/RtspMediaCodecReader.h index 0ca9a3a1d01..37d32c7d8e4 100644 --- a/dom/media/omx/RtspMediaCodecReader.h +++ b/dom/media/omx/RtspMediaCodecReader.h @@ -65,8 +65,6 @@ public: virtual nsresult ReadMetadata(MediaInfo* aInfo, MetadataTags** aTags) MOZ_OVERRIDE; - virtual void codecReserved(Track& aTrack) MOZ_OVERRIDE; - private: // A pointer to RtspMediaResource for calling the Rtsp specific function. // The lifetime of mRtspResource is controlled by MediaDecoder. MediaDecoder From 98aaf74c9ed525a8a6ed7f81ef101041c6086bc6 Mon Sep 17 00:00:00 2001 From: ProgramFOX <programfox@hotmail.be> Date: Wed, 22 Oct 2014 16:30:14 +0200 Subject: [PATCH 31/52] Bug 948379 - added float32x4 border cases. r=bbouvier --- js/src/builtin/SIMD.cpp | 2 +- .../ecma_6/TypedObject/simd/float32x4abs.js | 16 ++++- .../ecma_6/TypedObject/simd/float32x4add.js | 22 +++++- .../ecma_6/TypedObject/simd/float32x4and.js | 18 ++++- .../ecma_6/TypedObject/simd/float32x4clamp.js | 34 ++++++++-- .../ecma_6/TypedObject/simd/float32x4div.js | 25 +++++-- .../ecma_6/TypedObject/simd/float32x4equal.js | 10 ++- .../TypedObject/simd/float32x4fromint32x4.js | 12 +++- .../simd/float32x4fromint32x4bits.js | 10 ++- .../TypedObject/simd/float32x4greaterthan.js | 13 +++- .../simd/float32x4greaterthanorequal.js | 13 +++- .../TypedObject/simd/float32x4lessthan.js | 11 ++- .../simd/float32x4lessthanorequal.js | 11 ++- .../ecma_6/TypedObject/simd/float32x4max.js | 11 ++- .../ecma_6/TypedObject/simd/float32x4min.js | 11 ++- .../ecma_6/TypedObject/simd/float32x4mul.js | 25 +++++-- .../ecma_6/TypedObject/simd/float32x4neg.js | 16 ++++- .../ecma_6/TypedObject/simd/float32x4not.js | 16 ++++- .../TypedObject/simd/float32x4notequal.js | 10 ++- .../ecma_6/TypedObject/simd/float32x4or.js | 18 ++++- .../TypedObject/simd/float32x4reciprocal.js | 20 +++++- .../simd/float32x4reciprocalsqrt.js | 20 +++++- .../ecma_6/TypedObject/simd/float32x4scale.js | 20 +++++- .../ecma_6/TypedObject/simd/float32x4sqrt.js | 20 +++++- .../ecma_6/TypedObject/simd/float32x4sub.js | 24 ++++++- .../ecma_6/TypedObject/simd/float32x4with.js | 67 ++++++++++++++++++- .../ecma_6/TypedObject/simd/float32x4xor.js | 18 ++++- 27 files changed, 438 insertions(+), 55 deletions(-) diff --git a/js/src/builtin/SIMD.cpp b/js/src/builtin/SIMD.cpp index af9a4b8ff48..a1747452622 100644 --- a/js/src/builtin/SIMD.cpp +++ b/js/src/builtin/SIMD.cpp @@ -466,7 +466,7 @@ namespace js { // Unary SIMD operators template<typename T> struct Abs { - static inline T apply(T x) { return x < 0 ? -1 * x : x; } + static inline T apply(T x) { return mozilla::Abs(x); } }; template<typename T> struct Neg { diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4abs.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4abs.js index a38049c4997..5009bca48bc 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4abs.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4abs.js @@ -8,8 +8,6 @@ var summary = 'float32x4 abs'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(-1, 2, -3, 4); var c = SIMD.float32x4.abs(a); assertEq(c.x, 1); @@ -17,6 +15,20 @@ function test() { assertEq(c.z, 3); assertEq(c.w, 4); + var d = float32x4(-1.63, 2.46, -3.17, 4.94); + var f = SIMD.float32x4.abs(d); + assertEq(f.x, Math.fround(1.63)); + assertEq(f.y, Math.fround(2.46)); + assertEq(f.z, Math.fround(3.17)); + assertEq(f.w, Math.fround(4.94)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.abs(g); + assertEq(i.x, NaN); + assertEq(i.y, 0); + assertEq(i.z, Infinity); + assertEq(i.w, Infinity); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4add.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4add.js index 8a47b723bd0..e35f8386626 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4add.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4add.js @@ -5,11 +5,13 @@ var int32x4 = SIMD.int32x4; var summary = 'float32x4 add'; +function addf(a, b) { + return Math.fround(Math.fround(a) + Math.fround(b)); +} + function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var b = float32x4(10, 20, 30, 40); var c = SIMD.float32x4.add(a, b); @@ -18,6 +20,22 @@ function test() { assertEq(c.z, 33); assertEq(c.w, 44); + var d = float32x4(1.57, 2.27, 3.57, 4.19); + var e = float32x4(10.31, 20.49, 30.41, 40.72); + var f = SIMD.float32x4.add(d, e); + assertEq(f.x, addf(1.57, 10.31)); + assertEq(f.y, addf(2.27, 20.49)); + assertEq(f.z, addf(3.57, 30.41)); + assertEq(f.w, addf(4.19, 40.72)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(0, -0, -Infinity, -Infinity); + var i = SIMD.float32x4.add(g, h); + assertEq(i.x, NaN); + assertEq(i.y, -0); + assertEq(i.z, NaN); + assertEq(i.w, -Infinity); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4and.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4and.js index 7bcf2dbac05..a3196612c72 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4and.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4and.js @@ -19,8 +19,6 @@ var andf = (function() { function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var b = float32x4(10, 20, 30, 40); var c = SIMD.float32x4.and(a, b); @@ -29,6 +27,22 @@ function test() { assertEq(c.z, andf(3, 30)); assertEq(c.w, andf(4, 40)); + var d = float32x4(1.51, 2.98, 3.65, 4.34); + var e = float32x4(10.29, 20.12, 30.79, 40.41); + var f = SIMD.float32x4.and(d, e); + assertEq(f.x, andf(1.51, 10.29)); + assertEq(f.y, andf(2.98, 20.12)); + assertEq(f.z, andf(3.65, 30.79)); + assertEq(f.w, andf(4.34, 40.41)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(NaN, -0, -Infinity, Infinity); + var i = SIMD.float32x4.and(g, h); + assertEq(i.x, NaN); + assertEq(i.y, -0); + assertEq(i.z, Infinity); + assertEq(i.w, Infinity); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4clamp.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4clamp.js index a27d62503de..fc2e2de830d 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4clamp.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4clamp.js @@ -8,14 +8,34 @@ var summary = 'float32x4 clamp'; function test() { print(BUGNUMBER + ": " + summary); - var a = float32x4(-13.37, 10.46, 31.79, 0.54); - var lower = float32x4(2.1, 1.1, 50.13, 0.0); - var upper = float32x4(2.56, 5.55, 55.93, 1.1); + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. + + var a = float32x4(-20, 10, 30, 0.5); + var lower = float32x4(2, 1, 50, 0); + var upper = float32x4(2.5, 5, 55, 1); var c = SIMD.float32x4.clamp(a, lower, upper); - assertEq(c.x, Math.fround(2.1)); - assertEq(c.y, Math.fround(5.55)); - assertEq(c.z, Math.fround(50.13)); - assertEq(c.w, Math.fround(0.54)); + assertEq(c.x, 2); + assertEq(c.y, 5); + assertEq(c.z, 50); + assertEq(c.w, 0.5); + + var d = float32x4(-13.37, 10.46, 31.79, 0.54); + var lower1 = float32x4(2.1, 1.1, 50.13, 0.0); + var upper1 = float32x4(2.56, 5.55, 55.93, 1.1); + var f = SIMD.float32x4.clamp(d, lower1, upper1); + assertEq(f.x, Math.fround(2.1)); + assertEq(f.y, Math.fround(5.55)); + assertEq(f.z, Math.fround(50.13)); + assertEq(f.w, Math.fround(0.54)); + + var g = float32x4(4, -Infinity, 10, -10); + var lower2 = float32x4(5, -Infinity, -Infinity, -Infinity); + var upper2 = float32x4(Infinity, 5, Infinity, Infinity); + var i = SIMD.float32x4.clamp(g, lower2, upper2); + assertEq(i.x, 5); + assertEq(i.y, -Infinity); + assertEq(i.z, 10); + assertEq(i.w, -10); if (typeof reportCompare === "function") reportCompare(true, true); diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4div.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4div.js index c48256a4207..30046d35037 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4div.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4div.js @@ -5,22 +5,39 @@ var int32x4 = SIMD.int32x4; var summary = 'float32x4 div'; +function divf(a, b) { + return Math.fround(Math.fround(a) / Math.fround(b)); +} + function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var b = float32x4(10, 20, 30, 40); - var c = SIMD.float32x4.div(b,a); + var c = SIMD.float32x4.div(b, a); assertEq(c.x, 10); assertEq(c.y, 10); assertEq(c.z, 10); assertEq(c.w, 10); + var d = float32x4(1.26, 2.03, 3.17, 4.59); + var e = float32x4(11.025, 17.3768, 29.1957, 46.4049); + var f = SIMD.float32x4.div(e, d); + assertEq(f.x, divf(11.025, 1.26)); + assertEq(f.y, divf(17.3768, 2.03)); + assertEq(f.z, divf(29.1957, 3.17)); + assertEq(f.w, divf(46.4049, 4.59)); + + var g = float32x4(0, -0, Infinity, -Infinity); + var h = float32x4(1, 1, -Infinity, Infinity); + var i = SIMD.float32x4.div(h, g); + assertEq(i.x, Infinity); + assertEq(i.y, -Infinity); + assertEq(i.z, NaN); + assertEq(i.w, NaN); + if (typeof reportCompare === "function") reportCompare(true, true); } test(); - diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4equal.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4equal.js index c1566cbe8ab..9ad89e46adb 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4equal.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4equal.js @@ -8,7 +8,7 @@ var summary = 'float32x4 equal'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + // FIXME -- Bug 1081697: Amend to check for correctness of NaN/-0/Infinity/-Infinity border cases. var a = float32x4(1, 20, 30, 40); var b = float32x4(10, 20, 30, 4); @@ -18,6 +18,14 @@ function test() { assertEq(c.z, -1); assertEq(c.w, 0); + var d = float32x4(1.89, 20.51, 30.46, 40.12); + var e = float32x4(10.89, 20.51, Math.fround(30.46), 4.12); + var f = SIMD.float32x4.equal(d, e); + assertEq(c.x, 0); + assertEq(c.y, -1); + assertEq(c.z, -1); + assertEq(c.w, 0); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4fromint32x4.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4fromint32x4.js index fe8428254d6..c6c50fa2a8e 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4fromint32x4.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4fromint32x4.js @@ -8,7 +8,8 @@ var summary = 'float32x4 fromInt32x4'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); var a = int32x4(1, 2, 3, 4); var c = SIMD.float32x4.fromInt32x4(a); @@ -17,6 +18,15 @@ function test() { assertEq(c.z, 3); assertEq(c.w, 4); + var value1 = Math.pow(2, 30) - 1; + var value2 = -Math.pow(2, 30); + var d = int32x4(INT32_MIN, INT32_MAX, value1, value2); + var f = float32x4.fromInt32x4(d); + assertEq(f.x, Math.fround(INT32_MIN)); + assertEq(f.y, Math.fround(INT32_MAX)); + assertEq(f.z, Math.fround(value1)); + assertEq(f.w, Math.fround(value2)); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4fromint32x4bits.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4fromint32x4bits.js index 90b07c3e97d..64a9fb1b2c3 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4fromint32x4bits.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4fromint32x4bits.js @@ -8,7 +8,8 @@ var summary = 'float32x4 fromInt32x4Bits'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); var a = int32x4(100, 200, 300, 400); var c = SIMD.float32x4.fromInt32x4Bits(a); @@ -17,6 +18,13 @@ function test() { assertEq(c.z, 4.203895392974451e-43); assertEq(c.w, 5.605193857299268e-43); + var d = int32x4(INT32_MIN, INT32_MAX, 0, 0); + var f = float32x4.fromInt32x4Bits(d); + assertEq(f.x, -0); + assertEq(f.y, NaN); + assertEq(f.z, 0); + assertEq(f.w, 0); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4greaterthan.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4greaterthan.js index e61897d2524..6fe4e243108 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4greaterthan.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4greaterthan.js @@ -8,16 +8,25 @@ var summary = 'float32x4 greaterThan'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. var a = float32x4(1, 20, 3, 40); var b = float32x4(10, 2, 30, 4); - var c = SIMD.float32x4.greaterThan(b,a); + var c = SIMD.float32x4.greaterThan(b, a); assertEq(c.x, -1); assertEq(c.y, 0); assertEq(c.z, -1); assertEq(c.w, 0); + var d = float32x4(10.8399, 20.37, 3.07, 4.6802); + var e = float32x4(10.8401, 20.367, 3.1, 4.6801); + var f = float32x4.greaterThan(e, d); + assertEq(f.x, -1); + assertEq(f.y, 0); + assertEq(f.z, -1); + assertEq(f.w, 0); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4greaterthanorequal.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4greaterthanorequal.js index 5ee71e8cf93..e1963c3a00c 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4greaterthanorequal.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4greaterthanorequal.js @@ -8,16 +8,25 @@ var summary = 'float32x4 greaterThanOrEqual'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. var a = float32x4(1, 20, 30, 40); var b = float32x4(10, 20, 30, 4); - var c = SIMD.float32x4.greaterThanOrEqual(b,a); + var c = SIMD.float32x4.greaterThanOrEqual(b, a); assertEq(c.x, -1); assertEq(c.y, -1); assertEq(c.z, -1); assertEq(c.w, 0); + var d = float32x4(10.029, 20.87, 30.56, 4.7); + var e = float32x4(10.03, 20.87, 30.56, 4.698); + var f = float32x4.greaterThanOrEqual(e, d); + assertEq(f.x, -1); + assertEq(f.y, -1); + assertEq(f.z, -1); + assertEq(f.w, 0); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4lessthan.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4lessthan.js index 4318ecbfb37..199babf0e66 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4lessthan.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4lessthan.js @@ -8,7 +8,8 @@ var summary = 'float32x4 lessThan'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. var a = float32x4(1, 20, 3, 40); var b = float32x4(10, 2, 30, 4); @@ -18,6 +19,14 @@ function test() { assertEq(c.z, -1); assertEq(c.w, 0); + var d = float32x4(1.5399, 20.001, 30.045, 4.74); + var e = float32x4(1.54, 19.999, 30.05, 4.72); + var f = float32x4.lessThan(a, b); + assertEq(f.x, -1); + assertEq(f.y, 0); + assertEq(f.z, -1); + assertEq(f.w, 0); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4lessthanorequal.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4lessthanorequal.js index 35bd74e392f..7c9d9d3003e 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4lessthanorequal.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4lessthanorequal.js @@ -8,7 +8,8 @@ var summary = 'float32x4 lessThanOrEqual'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. var a = float32x4(1, 20, 30, 40); var b = float32x4(10, 20, 30, 4); @@ -18,6 +19,14 @@ function test() { assertEq(c.z, -1); assertEq(c.w, 0); + var d = float32x4(9.999, 20.78, 30.14, 40.1235); + var e = float32x4(10, 20.78, 30.14, 40.123); + var f = float32x4.lessThanOrEqual(d, e); + assertEq(f.x, -1); + assertEq(f.y, -1); + assertEq(f.z, -1); + assertEq(f.w, 0); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4max.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4max.js index 28d8d5db871..5eb7f1ef7a3 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4max.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4max.js @@ -8,7 +8,8 @@ var summary = 'float32x4 max'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. var a = float32x4(1, 20, 30, 4); var b = float32x4(10, 2, 3, 40); @@ -18,6 +19,14 @@ function test() { assertEq(c.z, 30); assertEq(c.w, 40); + var d = float32x4(9.999, 2.1234, 30.4443, 4); + var e = float32x4(10, 2.1233, 30.4444, 4.0001); + var f = float32x4.max(d, e); + assertEq(f.x, 10); + assertEq(f.y, Math.fround(2.1234)); + assertEq(f.z, Math.fround(30.4444)); + assertEq(f.w, Math.fround(4.0001)); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4min.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4min.js index 73f55944376..659e5ad4e10 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4min.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4min.js @@ -8,7 +8,8 @@ var summary = 'float32x4 min'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. var a = float32x4(1, 20, 3, 40); var b = float32x4(10, 2, 30, 4); @@ -18,6 +19,14 @@ function test() { assertEq(c.z, 3); assertEq(c.w, 4); + var d = float32x4(1.4321, 20.5567, 30.8999, 4.0002); + var e = float32x4(1.432, 20.5568, 30.8998, 4.0001); + var f = float32x4.min(d, e); + assertEq(f.x, Math.fround(1.432)); + assertEq(f.y, Math.fround(20.5567)); + assertEq(f.z, Math.fround(30.8998)); + assertEq(f.w, Math.fround(4.0001)); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4mul.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4mul.js index efe67c3007e..53d34001463 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4mul.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4mul.js @@ -3,13 +3,15 @@ var BUGNUMBER = 946042; var float32x4 = SIMD.float32x4; var int32x4 = SIMD.int32x4; -var summary = 'float32x4 add'; +var summary = 'float32x4 mul'; + +function mulf(a, b) { + return Math.fround(Math.fround(a) * Math.fround(b)); +} function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var b = float32x4(10, 20, 30, 40); var c = SIMD.float32x4.mul(a, b); @@ -18,9 +20,24 @@ function test() { assertEq(c.z, 90); assertEq(c.w, 160); + var d = float32x4(1.66, 2.57, 3.73, 4.12); + var e = float32x4(10.67, 20.68, 30.02, 40.58); + var f = SIMD.float32x4.mul(d, e); + assertEq(f.x, mulf(1.66, 10.67)); + assertEq(f.y, mulf(2.57, 20.68)); + assertEq(f.z, mulf(3.73, 30.02)); + assertEq(f.w, mulf(4.12, 40.58)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(NaN, -0, -Infinity, 0); + var i = SIMD.float32x4.mul(g, h); + assertEq(i.x, NaN); + assertEq(i.y, 0); + assertEq(i.z, -Infinity); + assertEq(i.w, NaN); + if (typeof reportCompare === "function") reportCompare(true, true); } test(); - diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4neg.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4neg.js index a0e55222942..b391734ff07 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4neg.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4neg.js @@ -8,8 +8,6 @@ var summary = 'float32x4 neg'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var c = SIMD.float32x4.neg(a); assertEq(c.x, -1); @@ -17,6 +15,20 @@ function test() { assertEq(c.z, -3); assertEq(c.w, -4); + var d = float32x4(0.999, -0.001, 3.78, 4.05); + var f = SIMD.float32x4.neg(d); + assertEq(f.x, Math.fround(-0.999)); + assertEq(f.y, Math.fround(0.001)); + assertEq(f.z, Math.fround(-3.78)); + assertEq(f.w, Math.fround(-4.05)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.neg(g); + assertEq(i.x, NaN); + assertEq(i.y, 0); + assertEq(i.z, -Infinity); + assertEq(i.w, Infinity); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4not.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4not.js index ce28e2e2472..df65ad785b5 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4not.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4not.js @@ -18,8 +18,6 @@ var notf = (function() { function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(2, 13, -37, 4.2); var c = SIMD.float32x4.not(a); assertEq(c.x, notf(2)); @@ -27,6 +25,20 @@ function test() { assertEq(c.z, notf(-37)); assertEq(c.w, notf(4.2)); + var d = float32x4(2.897, 13.245, -37.781, 5.28); + var f = SIMD.float32x4.not(d); + assertEq(f.x, notf(2.897)); + assertEq(f.y, notf(13.245)); + assertEq(f.z, notf(-37.781)); + assertEq(f.w, notf(5.28)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.not(g); + assertEq(i.x, notf(NaN)); + assertEq(i.y, notf(-0)); + assertEq(i.z, notf(Infinity)); + assertEq(i.w, notf(-Infinity)); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4notequal.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4notequal.js index 32902f52b68..c46bcba524d 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4notequal.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4notequal.js @@ -8,7 +8,7 @@ var summary = 'float32x4 notEqual'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. + // FIXME -- Bug 1081697: Amend to check for correctness of NaN/-0/Infinity/-Infinity border cases. var a = float32x4(1, 20, 30, 40); var b = float32x4(10, 20, 30, 4); @@ -18,6 +18,14 @@ function test() { assertEq(c.z, 0); assertEq(c.w, -1); + var d = float32x4(9.98, 20.65, 30.14, 4.235); + var e = float32x4(9.99, 20.65, Math.fround(30.14), 4.23); + var f = SIMD.float32x4.notEqual(d, e); + assertEq(f.x, -1); + assertEq(f.y, 0); + assertEq(f.z, 0); + assertEq(f.w, -1); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4or.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4or.js index a6bcf016fcc..b896efaf21f 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4or.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4or.js @@ -19,8 +19,6 @@ var orf = (function() { function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var b = float32x4(10, 20, 30, 40); var c = SIMD.float32x4.or(a, b); @@ -29,6 +27,22 @@ function test() { assertEq(c.z, orf(3, 30)); assertEq(c.w, orf(4, 40)); + var d = float32x4(1.12, 2.39, 3.83, 4.57); + var e = float32x4(10.76, 20.41, 30.96, 40.23); + var f = SIMD.float32x4.or(d, e); + assertEq(f.x, orf(1.12, 10.76)); + assertEq(f.y, orf(2.39, 20.41)); + assertEq(f.z, orf(3.83, 30.96)); + assertEq(f.w, orf(4.57, 40.23)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(5, 5, -Infinity, Infinity); + var i = SIMD.float32x4.or(g, h); + assertEq(i.x, orf(NaN, 5)); + assertEq(i.y, orf(-0, 5)); + assertEq(i.z, orf(Infinity, -Infinity)); + assertEq(i.w, orf(-Infinity, Infinity)); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4reciprocal.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4reciprocal.js index ff239d6d65b..43f1acf7ac7 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4reciprocal.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4reciprocal.js @@ -5,11 +5,13 @@ var int32x4 = SIMD.int32x4; var summary = 'float32x4 reciprocal'; +function reciprocalf(a) { + return Math.fround(1 / Math.fround(a)); +} + function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 0.5, 0.25, 0.125); var c = SIMD.float32x4.reciprocal(a); assertEq(c.x, 1); @@ -17,6 +19,20 @@ function test() { assertEq(c.z, 4); assertEq(c.w, 8); + var d = float32x4(1.6, 0.8, 0.4, 0.2); + var f = SIMD.float32x4.reciprocal(d); + assertEq(f.x, reciprocalf(1.6)); + assertEq(f.y, reciprocalf(0.8)); + assertEq(f.z, reciprocalf(0.4)); + assertEq(f.w, reciprocalf(0.2)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.reciprocal(g); + assertEq(i.x, NaN); + assertEq(i.y, -Infinity); + assertEq(i.z, 0); + assertEq(i.w, -0); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4reciprocalsqrt.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4reciprocalsqrt.js index 02308628815..8bd6750d1d2 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4reciprocalsqrt.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4reciprocalsqrt.js @@ -5,11 +5,13 @@ var int32x4 = SIMD.int32x4; var summary = 'float32x4 reciprocalSqrt'; +function reciprocalsqrtf(a) { + return Math.fround(Math.sqrt(1 / Math.fround(a))); +} + function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 1, 0.25, 0.25); var c = SIMD.float32x4.reciprocalSqrt(a); assertEq(c.x, 1); @@ -17,6 +19,20 @@ function test() { assertEq(c.z, 2); assertEq(c.w, 2); + var d = float32x4(25, 16, 6.25, 1.5625); + var f = SIMD.float32x4.reciprocalSqrt(d); + assertEq(f.x, reciprocalsqrtf(25)); + assertEq(f.y, reciprocalsqrtf(16)); + assertEq(f.z, reciprocalsqrtf(6.25)); + assertEq(f.w, reciprocalsqrtf(1.5625)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.reciprocalSqrt(g); + assertEq(i.x, NaN); + assertEq(i.y, -Infinity); + assertEq(i.z, 0); + assertEq(i.w, NaN); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4scale.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4scale.js index 36ada596ade..923c878f1d9 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4scale.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4scale.js @@ -5,11 +5,13 @@ var int32x4 = SIMD.int32x4; var summary = 'float32x4 scale'; +function mulf(a, b) { + return Math.fround(Math.fround(a) * Math.fround(b)); +} + function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var c = SIMD.float32x4.scale(a, 2); assertEq(c.x, 2); @@ -17,6 +19,20 @@ function test() { assertEq(c.z, 6); assertEq(c.w, 8); + var d = float32x4(1.34, 2.76, 3.21, 4.09); + var f = float32x4.scale(d, 2.54); + assertEq(f.x, mulf(1.34, 2.54)); + assertEq(f.y, mulf(2.76, 2.54)); + assertEq(f.z, mulf(3.21, 2.54)); + assertEq(f.w, mulf(4.09, 2.54)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = float32x4.scale(g, 2.54); + assertEq(i.x, NaN); + assertEq(i.y, -0); + assertEq(i.z, Infinity); + assertEq(i.w, -Infinity); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4sqrt.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4sqrt.js index d16a5c6a315..f8fbbb24ed8 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4sqrt.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4sqrt.js @@ -5,11 +5,13 @@ var int32x4 = SIMD.int32x4; var summary = 'float32x4 sqrt'; +function sqrtf(a) { + return Math.fround(Math.sqrt(Math.fround(a))); +} + function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 4, 9, 16); var c = SIMD.float32x4.sqrt(a); assertEq(c.x, 1); @@ -17,6 +19,20 @@ function test() { assertEq(c.z, 3); assertEq(c.w, 4); + var d = float32x4(2.7225, 7.3441, 9.4249, -1); + var f = SIMD.float32x4.sqrt(d); + assertEq(f.x, sqrtf(2.7225)); + assertEq(f.y, sqrtf(7.3441)); + assertEq(f.z, sqrtf(9.4249)); + assertEq(f.w, NaN); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.sqrt(g); + assertEq(i.x, NaN); + assertEq(i.y, -0); + assertEq(i.z, Infinity); + assertEq(i.w, NaN); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4sub.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4sub.js index 2b8314d009f..759284e6012 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4sub.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4sub.js @@ -5,19 +5,37 @@ var int32x4 = SIMD.int32x4; var summary = 'float32x4 sub'; +function subf(a, b) { + return Math.fround(Math.fround(a) - Math.fround(b)); +} + function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var b = float32x4(10, 20, 30, 40); - var c = SIMD.float32x4.sub(b,a); + var c = SIMD.float32x4.sub(b, a); assertEq(c.x, 9); assertEq(c.y, 18); assertEq(c.z, 27); assertEq(c.w, 36); + var d = float32x4(1.34, 2.95, 3.17, 4.29); + var e = float32x4(10.18, 20.43, 30.63, 40.38); + var f = SIMD.float32x4.sub(e, d); + assertEq(f.x, subf(10.18, 1.34)); + assertEq(f.y, subf(20.43, 2.95)); + assertEq(f.z, subf(30.63, 3.17)); + assertEq(f.w, subf(40.38, 4.29)); + + var g = float32x4(NaN, -0, -Infinity, -Infinity); + var h = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.sub(h, g); + assertEq(i.x, NaN); + assertEq(i.y, 0); + assertEq(i.z, Infinity); + assertEq(i.w, NaN); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4with.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4with.js index 49b3642581b..24a2bda54d9 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4with.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4with.js @@ -8,18 +8,81 @@ var summary = 'float32x4 with'; function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var x = SIMD.float32x4.withX(a, 5); var y = SIMD.float32x4.withY(a, 5); var z = SIMD.float32x4.withZ(a, 5); var w = SIMD.float32x4.withW(a, 5); assertEq(x.x, 5); + assertEq(x.y, 2); + assertEq(x.z, 3); + assertEq(x.w, 4); + + assertEq(y.x, 1); assertEq(y.y, 5); + assertEq(y.z, 3); + assertEq(y.w, 4); + + assertEq(z.x, 1); + assertEq(z.y, 2); assertEq(z.z, 5); + assertEq(z.w, 4); + + assertEq(w.x, 1); + assertEq(w.y, 2); + assertEq(w.z, 3); assertEq(w.w, 5); + var b = float32x4(1.87, 2.08, 3.84, 4.17); + var x1 = SIMD.float32x4.withX(b, 5.38); + var y1 = SIMD.float32x4.withY(b, 5.19); + var z1 = SIMD.float32x4.withZ(b, 5.11); + var w1 = SIMD.float32x4.withW(b, 5.07); + assertEq(x1.x, Math.fround(5.38)); + assertEq(x1.y, Math.fround(2.08)); + assertEq(x1.z, Math.fround(3.84)); + assertEq(x1.w, Math.fround(4.17)); + + assertEq(y1.x, Math.fround(1.87)); + assertEq(y1.y, Math.fround(5.19)); + assertEq(y1.z, Math.fround(3.84)); + assertEq(y1.w, Math.fround(4.17)); + + assertEq(z1.x, Math.fround(1.87)); + assertEq(z1.y, Math.fround(2.08)); + assertEq(z1.z, Math.fround(5.11)); + assertEq(z1.w, Math.fround(4.17)); + + assertEq(w1.x, Math.fround(1.87)); + assertEq(w1.y, Math.fround(2.08)); + assertEq(w1.z, Math.fround(3.84)); + assertEq(w1.w, Math.fround(5.07)); + + var c = float32x4(NaN, -0, Infinity, -Infinity); + var x2 = SIMD.float32x4.withX(c, 0); + var y2 = SIMD.float32x4.withY(c, 0); + var z2 = SIMD.float32x4.withZ(c, 0); + var w2 = SIMD.float32x4.withW(c, 0); + assertEq(x2.x, 0); + assertEq(x2.y, -0); + assertEq(x2.z, Infinity); + assertEq(x2.w, -Infinity); + + assertEq(y2.x, NaN); + assertEq(y2.y, 0); + assertEq(y2.z, Infinity); + assertEq(y2.w, -Infinity); + + assertEq(z2.x, NaN); + assertEq(z2.y, -0); + assertEq(z2.z, 0); + assertEq(z2.w, -Infinity); + + assertEq(w2.x, NaN); + assertEq(w2.y, -0); + assertEq(w2.z, Infinity); + assertEq(w2.w, 0); + if (typeof reportCompare === "function") reportCompare(true, true); } diff --git a/js/src/tests/ecma_6/TypedObject/simd/float32x4xor.js b/js/src/tests/ecma_6/TypedObject/simd/float32x4xor.js index dae21043c87..31c61efc754 100644 --- a/js/src/tests/ecma_6/TypedObject/simd/float32x4xor.js +++ b/js/src/tests/ecma_6/TypedObject/simd/float32x4xor.js @@ -19,8 +19,6 @@ var xorf = (function() { function test() { print(BUGNUMBER + ": " + summary); - // FIXME -- Bug 948379: Amend to check for correctness of border cases. - var a = float32x4(1, 2, 3, 4); var b = float32x4(10, 20, 30, 40); var c = SIMD.float32x4.xor(a, b); @@ -29,6 +27,22 @@ function test() { assertEq(c.z, xorf(3, 30)); assertEq(c.w, xorf(4, 40)); + var d = float32x4(1.07, 2.62, 3.79, 4.15); + var e = float32x4(10.38, 20.47, 30.44, 40.16); + var f = SIMD.float32x4.xor(d, e); + assertEq(f.x, xorf(1.07, 10.38)); + assertEq(f.y, xorf(2.62, 20.47)); + assertEq(f.z, xorf(3.79, 30.44)); + assertEq(f.w, xorf(4.15, 40.16)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(-0, Infinity, -Infinity, NaN); + var i = SIMD.float32x4.xor(g, h); + assertEq(i.x, xorf(NaN, -0)); + assertEq(i.y, xorf(-0, Infinity)); + assertEq(i.z, xorf(Infinity, -Infinity)); + assertEq(i.w, xorf(-Infinity, NaN)); + if (typeof reportCompare === "function") reportCompare(true, true); } From 4dc4c676bc2812e4c129fea28ef4a5b4fb64309c Mon Sep 17 00:00:00 2001 From: James Kitchener <jkitch.bug@gmail.com> Date: Fri, 24 Oct 2014 19:08:00 +0200 Subject: [PATCH 32/52] Bug 727804 - Add another mfenced fence size testcase r=fredw --- layout/reftests/mathml/mfenced-12-ref.html | 40 ++++++++++++++++++++++ layout/reftests/mathml/mfenced-12.html | 35 +++++++++++++++++++ layout/reftests/mathml/reftest.list | 1 + 3 files changed, 76 insertions(+) create mode 100644 layout/reftests/mathml/mfenced-12-ref.html create mode 100644 layout/reftests/mathml/mfenced-12.html diff --git a/layout/reftests/mathml/mfenced-12-ref.html b/layout/reftests/mathml/mfenced-12-ref.html new file mode 100644 index 00000000000..c411e9371b1 --- /dev/null +++ b/layout/reftests/mathml/mfenced-12-ref.html @@ -0,0 +1,40 @@ +<!doctype html> +<html class="reftest-wait"> + +<math style="font-size:25px; position: absolute; top: 10px; left:10px;"> + <mrow id="outer"> + <mo>(</mo> + <mrow> + <mn id="a" style="visibility:hidden;">a</mn> + <mo>&amp;</mo> + <mn id="c" style="visibility:hidden;">c</mn> + </mrow> + <mo>)</mo> + </mrow> +</math> + +<!-- Implementation kludge. <mfenced> renders the position of the ampersand in + a slightly different position compared to <mo>+<mrow>. + In this test we are only concerned about the size of the fences "(" and + ")", so the ampersand gets redacted. --> +<div id="div" style="position: absolute; background:black; top: 0px; + height: 120px;"></div> + +<script> + function doTest() + { + a = document.getElementById("a"); + c = document.getElementById("c"); + div = document.getElementById("div"); + outer = document.getElementById("outer"); + + left = a.getBoundingClientRect().left; // div's left + div.style.left = left + 'px'; + div.style.width = (c.getBoundingClientRect().right - left ) + 'px'; + + document.documentElement.removeAttribute("class"); + } + window.addEventListener("MozReftestInvalidate", doTest, false); +</script> + +</html> diff --git a/layout/reftests/mathml/mfenced-12.html b/layout/reftests/mathml/mfenced-12.html new file mode 100644 index 00000000000..df88b3da7e0 --- /dev/null +++ b/layout/reftests/mathml/mfenced-12.html @@ -0,0 +1,35 @@ +<!doctype html> +<html class="reftest-wait"> + +<math style="font-size:25px; position: absolute; top: 10px; left:10px;"> + <mfenced id="outer" separators="&amp;"> + <mn id="a" style="visibility:hidden;">a</mn> + <mn id="c" style="visibility:hidden;">c</mn> + </mfenced> +</math> + +<!-- Implementation kludge. <mfenced> renders the position of the ampersand in + a slightly different position compared to <mo>+<mrow>. + In this test we are only concerned about the size of the fences "(" and + ")", so the ampersand gets redacted. --> +<div id="div" style="position: absolute; background:black; top: 0px; + height: 120px;"></div> + +<script> + function doTest() + { + a = document.getElementById("a"); + c = document.getElementById("c"); + div = document.getElementById("div"); + outer = document.getElementById("outer"); + + left = a.getBoundingClientRect().left; // div's left + div.style.left = left + 'px'; + div.style.width = (c.getBoundingClientRect().right - left ) + 'px'; + + document.documentElement.removeAttribute("class"); + } + window.addEventListener("MozReftestInvalidate", doTest, false); +</script> + +</html> diff --git a/layout/reftests/mathml/reftest.list b/layout/reftests/mathml/reftest.list index 907d6bacfd6..348fb24c175 100644 --- a/layout/reftests/mathml/reftest.list +++ b/layout/reftests/mathml/reftest.list @@ -38,6 +38,7 @@ skip-if(B2G&&browserIsRemote) random-if(smallScreen&&Android) fuzzy(255,200) == == mfenced-9.html mfenced-9-ref.html fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == mfenced-10.html mfenced-10-ref.html # Windows versions without Cambria Math, see bug 670592 fails-if(winWidget&&d2d) == mfenced-11.html mfenced-11-ref.html +== mfenced-12.html mfenced-12-ref.html == mi-mathvariant-1.xhtml mi-mathvariant-1-ref.xhtml == mi-mathvariant-2.xhtml mi-mathvariant-2-ref.xhtml != mi-mathvariant-3.html mi-mathvariant-3-ref.html From b2034fd10d40ccd84e124769ef23aa2e4b346d52 Mon Sep 17 00:00:00 2001 From: "timeless@bemail.org" <timeless@bemail.org> Date: Fri, 24 Oct 2014 17:08:00 +0200 Subject: [PATCH 33/52] Bug 620275 - Remove an unnecessary null-check. r=bz --- layout/generic/nsSubDocumentFrame.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/layout/generic/nsSubDocumentFrame.cpp b/layout/generic/nsSubDocumentFrame.cpp index 23a897dfabc..cacf3d89504 100644 --- a/layout/generic/nsSubDocumentFrame.cpp +++ b/layout/generic/nsSubDocumentFrame.cpp @@ -100,10 +100,8 @@ nsSubDocumentFrame::Init(nsIContent* aContent, nsIFrame* aPrevInFlow) { // determine if we are a <frame> or <iframe> - if (aContent) { - nsCOMPtr<nsIDOMHTMLFrameElement> frameElem = do_QueryInterface(aContent); - mIsInline = frameElem ? false : true; - } + nsCOMPtr<nsIDOMHTMLFrameElement> frameElem = do_QueryInterface(aContent); + mIsInline = frameElem ? false : true; nsLeafFrame::Init(aContent, aParent, aPrevInFlow); From 142aaa69e47dc4a2148eb1a5c32fba191cab2877 Mon Sep 17 00:00:00 2001 From: Benjamin Bouvier <benj@benj.me> Date: Mon, 27 Oct 2014 11:29:25 +0100 Subject: [PATCH 34/52] Bug 1087873: Fix signed/unsigned comparisons in Shuffle/Swizzle; r=till --- js/src/builtin/SIMD.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/js/src/builtin/SIMD.cpp b/js/src/builtin/SIMD.cpp index a1747452622..93aa4fd3515 100644 --- a/js/src/builtin/SIMD.cpp +++ b/js/src/builtin/SIMD.cpp @@ -712,14 +712,14 @@ Swizzle(JSContext *cx, unsigned argc, Value *vp) if (args.length() != (V::lanes + 1) || !IsVectorObject<V>(args[0])) return ErrorBadArgs(cx); - int32_t lanes[V::lanes]; + uint32_t lanes[V::lanes]; for (unsigned i = 0; i < V::lanes; i++) { int32_t lane = -1; if (!ToInt32(cx, args[i + 1], &lane)) return false; - if (lane < 0 || lane >= V::lanes) + if (lane < 0 || uint32_t(lane) >= V::lanes) return ErrorBadArgs(cx); - lanes[i] = lane; + lanes[i] = uint32_t(lane); } Elem *val = TypedObjectMemory<Elem *>(args[0]); @@ -741,14 +741,14 @@ Shuffle(JSContext *cx, unsigned argc, Value *vp) if (args.length() != (V::lanes + 2) || !IsVectorObject<V>(args[0]) || !IsVectorObject<V>(args[1])) return ErrorBadArgs(cx); - int32_t lanes[V::lanes]; + uint32_t lanes[V::lanes]; for (unsigned i = 0; i < V::lanes; i++) { int32_t lane = -1; if (!ToInt32(cx, args[i + 2], &lane)) return false; - if (lane < 0 || lane >= (2 * V::lanes)) + if (lane < 0 || uint32_t(lane) >= (2 * V::lanes)) return ErrorBadArgs(cx); - lanes[i] = lane; + lanes[i] = uint32_t(lane); } Elem *lhs = TypedObjectMemory<Elem *>(args[0]); From 4f07f4b8f2f2dd772b9b15e2fa1d68a4d1ac7a2c Mon Sep 17 00:00:00 2001 From: Jan Beich <jbeich@vfemail.net> Date: Sat, 25 Oct 2014 10:08:00 +0200 Subject: [PATCH 35/52] Bug 1089023 - Unbreak GTK3 build after bug 1087732. r=jwatt --- widget/gtk/nsNativeThemeGTK.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp index b2aebcfd764..e5e1867db79 100644 --- a/widget/gtk/nsNativeThemeGTK.cpp +++ b/widget/gtk/nsNativeThemeGTK.cpp @@ -34,6 +34,7 @@ #include <algorithm> using namespace mozilla; +using namespace mozilla::gfx; NS_IMPL_ISUPPORTS_INHERITED(nsNativeThemeGTK, nsNativeTheme, nsITheme, nsIObserver) @@ -880,10 +881,10 @@ nsNativeThemeGTK::DrawWidgetBackground(nsRenderingContext* aContext, renderer.Draw(ctx, drawingRect.Size(), rendererFlags, colormap); #else - cairo_t *ctx = - (cairo_t*)aDrawTarget->GetNativeSurface(NativeSurfaceType::CAIRO_CONTEXT); - MOZ_ASSERT(ctx); - moz_gtk_widget_paint(gtkWidgetType, ctx, &gdk_rect, + cairo_t *cairo_ctx = + (cairo_t*)aDrawTarget.GetNativeSurface(NativeSurfaceType::CAIRO_CONTEXT); + MOZ_ASSERT(cairo_ctx); + moz_gtk_widget_paint(gtkWidgetType, cairo_ctx, &gdk_rect, &state, flags, direction); #endif From 242eea3e31da0366c56768564edc6da57195c9a9 Mon Sep 17 00:00:00 2001 From: Kartikaya Gupta <kgupta@mozilla.com> Date: Fri, 24 Oct 2014 14:45:00 +0200 Subject: [PATCH 36/52] Bug 1088954 - Cleanup print 64-bit integers and remove a stray printf. r=botond --- gfx/layers/apz/src/APZCTreeManager.cpp | 4 ++-- gfx/layers/apz/src/InputQueue.cpp | 8 ++++---- gfx/tests/gtest/TestAsyncPanZoomController.cpp | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/gfx/layers/apz/src/APZCTreeManager.cpp b/gfx/layers/apz/src/APZCTreeManager.cpp index 616abf1d021..9bd2e3c8ed0 100644 --- a/gfx/layers/apz/src/APZCTreeManager.cpp +++ b/gfx/layers/apz/src/APZCTreeManager.cpp @@ -262,7 +262,7 @@ APZCTreeManager::PrepareAPZCForLayer(const LayerMetricsWrapper& aLayer, apzc = insertResult.first->second; PrintAPZCInfo(aLayer, apzc); } - APZCTM_LOG("Found APZC %p for layer %p with identifiers %lld %lld\n", apzc, aLayer.GetLayer(), guid.mLayersId, guid.mScrollId); + APZCTM_LOG("Found APZC %p for layer %p with identifiers %" PRId64 " %" PRId64 "\n", apzc, aLayer.GetLayer(), guid.mLayersId, guid.mScrollId); // If we haven't encountered a layer already with the same metrics, then we need to // do the full reuse-or-make-an-APZC algorithm, which is contained inside the block @@ -315,7 +315,7 @@ APZCTreeManager::PrepareAPZCForLayer(const LayerMetricsWrapper& aLayer, apzc->SetPrevSibling(nullptr); apzc->SetLastChild(nullptr); } - APZCTM_LOG("Using APZC %p for layer %p with identifiers %lld %lld\n", apzc, aLayer.GetLayer(), aLayersId, aMetrics.GetScrollId()); + APZCTM_LOG("Using APZC %p for layer %p with identifiers %" PRId64 " %" PRId64 "\n", apzc, aLayer.GetLayer(), aLayersId, aMetrics.GetScrollId()); apzc->NotifyLayersUpdated(aMetrics, aState.mIsFirstPaint && (aLayersId == aState.mOriginatingLayersId)); diff --git a/gfx/layers/apz/src/InputQueue.cpp b/gfx/layers/apz/src/InputQueue.cpp index 6d525884fd3..b18f689f50e 100644 --- a/gfx/layers/apz/src/InputQueue.cpp +++ b/gfx/layers/apz/src/InputQueue.cpp @@ -105,7 +105,7 @@ uint64_t InputQueue::InjectNewTouchBlock(AsyncPanZoomController* aTarget) { TouchBlockState* block = StartNewTouchBlock(aTarget, true); - INPQ_LOG("%p injecting new touch block with id %llu and target %p\n", + INPQ_LOG("%p injecting new touch block with id %" PRIu64 " and target %p\n", this, block->GetBlockId(), aTarget); ScheduleContentResponseTimeout(aTarget, block->GetBlockId()); return block->GetBlockId(); @@ -162,7 +162,7 @@ void InputQueue::ContentResponseTimeout(const uint64_t& aInputBlockId) { AsyncPanZoomController::AssertOnControllerThread(); - INPQ_LOG("got a content response timeout; block=%llu\n", aInputBlockId); + INPQ_LOG("got a content response timeout; block=%" PRIu64 "\n", aInputBlockId); bool success = false; for (size_t i = 0; i < mTouchBlockQueue.Length(); i++) { if (mTouchBlockQueue[i]->GetBlockId() == aInputBlockId) { @@ -179,7 +179,7 @@ void InputQueue::ContentReceivedTouch(uint64_t aInputBlockId, bool aPreventDefault) { AsyncPanZoomController::AssertOnControllerThread(); - INPQ_LOG("got a content response; block=%llu\n", aInputBlockId); + INPQ_LOG("got a content response; block=%" PRIu64 "\n", aInputBlockId); bool success = false; for (size_t i = 0; i < mTouchBlockQueue.Length(); i++) { if (mTouchBlockQueue[i]->GetBlockId() == aInputBlockId) { @@ -196,7 +196,7 @@ void InputQueue::SetAllowedTouchBehavior(uint64_t aInputBlockId, const nsTArray<TouchBehaviorFlags>& aBehaviors) { AsyncPanZoomController::AssertOnControllerThread(); - INPQ_LOG("got allowed touch behaviours; block=%llu\n", aInputBlockId); + INPQ_LOG("got allowed touch behaviours; block=%" PRIu64 "\n", aInputBlockId); bool success = false; for (size_t i = 0; i < mTouchBlockQueue.Length(); i++) { if (mTouchBlockQueue[i]->GetBlockId() == aInputBlockId) { diff --git a/gfx/tests/gtest/TestAsyncPanZoomController.cpp b/gfx/tests/gtest/TestAsyncPanZoomController.cpp index 7d427af6978..82111872874 100644 --- a/gfx/tests/gtest/TestAsyncPanZoomController.cpp +++ b/gfx/tests/gtest/TestAsyncPanZoomController.cpp @@ -1521,7 +1521,6 @@ TEST_F(APZCGestureDetectorTester, DoubleTapPreventDefaultBoth) { int time = 0; uint64_t blockIds[2]; ApzcDoubleTapAndCheckStatus(apzc, 10, 10, time, &blockIds); -printf_stderr("blockids %llu %llu\n", blockIds[0], blockIds[1]); // responses to the two touchstarts apzc->ContentReceivedTouch(blockIds[0], true); From cc128172d68e06a2b4c3ca377fcb400d16c9ab75 Mon Sep 17 00:00:00 2001 From: Eduardo Vela <evn@google.com> Date: Fri, 24 Oct 2014 07:33:00 +0200 Subject: [PATCH 37/52] Bug 1088684 - update Blogspot domains in PSL. r=gerv. --- netwerk/dns/effective_tld_names.dat | 3 +++ 1 file changed, 3 insertions(+) diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat index 6a8759c285f..2295cc3e2ed 100644 --- a/netwerk/dns/effective_tld_names.dat +++ b/netwerk/dns/effective_tld_names.dat @@ -8683,6 +8683,7 @@ ro.com // Google, Inc. // Submitted by Eduardo Vela <evn@google.com> 2012-10-24 appspot.com +blogspot.ae blogspot.be blogspot.bj blogspot.ca @@ -8697,6 +8698,7 @@ blogspot.com.ar blogspot.com.au blogspot.com.br blogspot.com.es +blogspot.com.tr blogspot.cv blogspot.cz blogspot.de @@ -8718,6 +8720,7 @@ blogspot.no blogspot.pt blogspot.re blogspot.ro +blogspot.ru blogspot.se blogspot.sg blogspot.sk From 92252d553b21c8252ac90421dc02865dc465ac65 Mon Sep 17 00:00:00 2001 From: Cosmin Malutan <cosmin.malutan@softvision.ro> Date: Thu, 23 Oct 2014 23:29:00 +0200 Subject: [PATCH 38/52] Bug 1086527 - Make sure PluralForm.get can be called from strict mode. r=Mossop --- intl/locale/PluralForm.jsm | 2 +- intl/locale/tests/unit/test_bug1086527.js | 20 ++++++++++++++++++++ intl/locale/tests/unit/xpcshell.ini | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 intl/locale/tests/unit/test_bug1086527.js diff --git a/intl/locale/PluralForm.jsm b/intl/locale/PluralForm.jsm index 36f3471896a..d1ee8ea0d81 100644 --- a/intl/locale/PluralForm.jsm +++ b/intl/locale/PluralForm.jsm @@ -135,7 +135,7 @@ this.PluralForm = { // Check for array out of bounds or empty strings if ((ret == undefined) || (ret == "")) { // Report the caller to help figure out who is causing badness - let caller = PluralForm.get.caller ? PluralForm.get.caller.name : "top"; + let caller = Components.stack.caller ? Components.stack.caller.name : "top"; // Display a message in the error console log(["Index #", index, " of '", aWords, "' for value ", aNum, diff --git a/intl/locale/tests/unit/test_bug1086527.js b/intl/locale/tests/unit/test_bug1086527.js new file mode 100644 index 00000000000..ae0c5b17a27 --- /dev/null +++ b/intl/locale/tests/unit/test_bug1086527.js @@ -0,0 +1,20 @@ +/* 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/. */ + +/** + * This unit test makes sure that PluralForm.get can be called from strict mode + */ + +Components.utils.import("resource://gre/modules/PluralForm.jsm"); + +delete PluralForm.numForms; +delete PluralForm.get; +[PluralForm.get, PluralForm.numForms] = PluralForm.makeGetter(9); + +function run_test() { + "use strict"; + + do_check_eq(3, PluralForm.numForms()); + do_check_eq("one", PluralForm.get(5, 'one;many')); +} diff --git a/intl/locale/tests/unit/xpcshell.ini b/intl/locale/tests/unit/xpcshell.ini index d97a93fb3e6..06d23bf49a8 100644 --- a/intl/locale/tests/unit/xpcshell.ini +++ b/intl/locale/tests/unit/xpcshell.ini @@ -13,6 +13,7 @@ skip-if = toolkit == "windows" || toolkit == "cocoa" [test_collation_mac_icu.js] run-if = toolkit == "cocoa" +[test_bug1086527.js] [test_pluralForm.js] [test_pluralForm_english.js] [test_pluralForm_makeGetter.js] From 87c15ed3d58eb5f97a141844feb9c61b64b375ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20Desr=C3=A9?= <fabrice@mozilla.com> Date: Sun, 26 Oct 2014 13:32:26 -0700 Subject: [PATCH 39/52] Bug 1088800 - Apps fail to launch on b2g desktop with OOP enabled r=bholley --- toolkit/devtools/touch-events.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/toolkit/devtools/touch-events.js b/toolkit/devtools/touch-events.js index ab8f85bcbf4..08cceafe1d7 100644 --- a/toolkit/devtools/touch-events.js +++ b/toolkit/devtools/touch-events.js @@ -194,12 +194,16 @@ function TouchEventHandler (window) { this.cancelClick = true; } } + function clone(obj) { + return Cu.cloneInto(obj, target); + } let unwraped = XPCNativeWrapper.unwrap(target); - unwraped.sendTouchEvent(name, [0], // event type, id - [evt.clientX], [evt.clientY], // x, y - [1], [1], // rx, ry - [0], [0], // rotation, force - 1); // count + unwraped.sendTouchEvent(name, clone([0]), // event type, id + clone([evt.clientX]), // x + clone([evt.clientY]), // y + clone([1]), clone([1]), // rx, ry + clone([0]), clone([0]), // rotation, force + 1); // count return; } let document = target.ownerDocument; From 35d68af20414711c8e34d2ab77d7e18b1d960984 Mon Sep 17 00:00:00 2001 From: Jessica Jong <jjong@mozilla.com> Date: Mon, 27 Oct 2014 10:10:19 +0800 Subject: [PATCH 40/52] Bug 1052842 - (follow-up) Use enums for NetworkSelectionMode in nsIGonkMobileConnectionService.idl. r=hsinyi --- dom/mobileconnection/gonk/nsIGonkMobileConnectionService.idl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dom/mobileconnection/gonk/nsIGonkMobileConnectionService.idl b/dom/mobileconnection/gonk/nsIGonkMobileConnectionService.idl index 7070a0e1732..017f506b456 100644 --- a/dom/mobileconnection/gonk/nsIGonkMobileConnectionService.idl +++ b/dom/mobileconnection/gonk/nsIGonkMobileConnectionService.idl @@ -9,7 +9,7 @@ "@mozilla.org/mobileconnection/gonkmobileconnectionservice;1" %} -[scriptable, uuid(7322619d-9abd-4410-99ce-207da80f9879)] +[scriptable, uuid(eae40ffe-394a-4355-8e0b-07170d3e70f4)] interface nsIGonkMobileConnectionService : nsIMobileConnectionService { void notifyNetworkInfoChanged(in unsigned long clientId, in jsval networkInfo); @@ -40,7 +40,7 @@ interface nsIGonkMobileConnectionService : nsIMobileConnectionService void notifyIccChanged(in unsigned long clientId, in DOMString iccId); void notifyNetworkSelectModeChanged(in unsigned long clientId, - in DOMString mode); + in long mode); void notifySpnAvailable(in unsigned long clientId); From cc8bc326f94de4a24433cd23a25add7347ad1a40 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 19:35:49 -0700 Subject: [PATCH 41/52] Bumping gaia.json for 4 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/fae12350d78c Author: Greg Weng <snowmantw@gmail.com> Desc: Merge pull request #25437 from snowmantw/bug1086175 Bug 1086175 - [Flame][KK]After full flash/reset phone, first time to ======== https://hg.mozilla.org/integration/gaia-central/rev/7de126c1df38 Author: Greg Weng <snowmantw@gmail.com> Desc: Bug 1086175 - [Flame][KK]After full flash/reset phone, first time to pair bluetooth with another phone will show notification then pair failed ======== https://hg.mozilla.org/integration/gaia-central/rev/42a93415aa1e Author: George <georgeiscoming@gmail.com> Desc: Merge pull request #25485 from cctuan/1079567 Bug 1079567 - [NFC][Shrinking UI] App is rendered as a black screen if the recipient device is pulled away before the user finishes the transfer gesture. ======== https://hg.mozilla.org/integration/gaia-central/rev/3e3e81feb7de Author: cctuan <georgeiscoming@gmail.com> Desc: Bug 1079567 - [NFC][Shrinking UI] App is rendered as a black screen if the recipient device is pulled away before the user finishes the transfer gesture. --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index b727f9c9924..1c952d2b832 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "3d86f253ab4a50bb899aa6642ff52ee525502664", + "revision": "fae12350d78c7ab12ad56f9dc468c1be2582e217", "repo_path": "/integration/gaia-central" } From 86e9a97593568467c01f47661fd45ed833569e67 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 19:47:05 -0700 Subject: [PATCH 42/52] Bumping manifests a=b2g-bump --- b2g/config/dolphin/sources.xml | 2 +- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 21543a418f5..2d7000c6c01 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index c655fcdaeb9..60659126d88 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index c6bf5362cb7..7426096a5c8 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 6c22f948ae1..a0a52bae842 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index c655fcdaeb9..60659126d88 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index 5306b47f2db..e6b5a3c2fcd 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 4d080c67a8e..5b41ef0c3ec 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ </project> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 6a957d838f4..5504712dcf5 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 6697eaca984..741eb5de1fc 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 25f558e9e63..5ae8acccce5 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 20ccfb3a294..a8eb36e08e3 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="e91d99e4d96954f06383c00bb9d79598a697e310"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> From 1179fd0a94c89b42a202ee07ac50d3fc9dc1ef0d Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 19:55:47 -0700 Subject: [PATCH 43/52] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/a3afe08d57c0 Author: Greg Weng <snowmantw@gmail.com> Desc: Merge pull request #25288 from snowmantw/bug1084530 Bug 1084530 - [Lockscreen] The device can fall asleep too quickly after... ======== https://hg.mozilla.org/integration/gaia-central/rev/915fe67c6a93 Author: Greg Weng <snowmantw@gmail.com> Desc: Bug 1084530 - [Lockscreen] The device can fall asleep too quickly after dialing the last digit to an emergency number --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 1c952d2b832..529d9d7d857 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "fae12350d78c7ab12ad56f9dc468c1be2582e217", + "revision": "a3afe08d57c0e4aa54f2501ed04096a159f0ee26", "repo_path": "/integration/gaia-central" } From 057972e360f863f3ce35075397f67c7e02a73306 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 20:01:56 -0700 Subject: [PATCH 44/52] Bumping manifests a=b2g-bump --- b2g/config/dolphin/sources.xml | 2 +- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 2d7000c6c01..625ecfe9b5a 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 60659126d88..ca2ec1d605c 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 7426096a5c8..8c95288d52e 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index a0a52bae842..96a22426d79 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 60659126d88..ca2ec1d605c 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index e6b5a3c2fcd..57d1f81c7e8 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 5b41ef0c3ec..9422e7e737f 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ </project> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 5504712dcf5..8e3939c4e3b 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 741eb5de1fc..3f03a039276 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 5ae8acccce5..3e7e8e6dd3f 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index a8eb36e08e3..bd40607d829 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="3de5491d76d3bb150ab0764d6c11dc6591f4d72b"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> From f615efd21593968f969f7d80de5a00e922358e62 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 20:10:48 -0700 Subject: [PATCH 45/52] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/ab7de80c4557 Author: Evan Tseng <itoyxd@gmail.com> Desc: Merge pull request #25264 from evanxd/bug-1047283 Bug 1047283 - [Calendar] Drawer /Add event/ Display event should not play scrolling animation r= millermedeiros ======== https://hg.mozilla.org/integration/gaia-central/rev/fafde2c3a084 Author: Evan Xd <itoyxd@gmail.com> Desc: Bug 1047283 - [Calendar] Drawer /Add event/ Display event should not play scrolling animation --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 529d9d7d857..c2d921cc835 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "a3afe08d57c0e4aa54f2501ed04096a159f0ee26", + "revision": "ab7de80c4557d74c2b2dcb19eba4ec7febee30df", "repo_path": "/integration/gaia-central" } From 51b414c84b9b1e54cc844201a912e89f3ae293b3 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 20:17:07 -0700 Subject: [PATCH 46/52] Bumping manifests a=b2g-bump --- b2g/config/dolphin/sources.xml | 2 +- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 625ecfe9b5a..ae61def33cb 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index ca2ec1d605c..dc9e47fe3e4 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 8c95288d52e..ffb0eb51ebf 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 96a22426d79..cc8d4321a47 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index ca2ec1d605c..dc9e47fe3e4 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index 57d1f81c7e8..80125c63afe 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 9422e7e737f..d6d1772e9e3 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ </project> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 8e3939c4e3b..9efa0b3a754 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 3f03a039276..6d7cd969657 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 3e7e8e6dd3f..e87e949f9d4 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index bd40607d829..6261a7b388f 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ec624ed592169227c522ff9f096f200fe9dfd336"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> From 43893eb28205df99f7974cf88409455bca9c1d0a Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 20:25:49 -0700 Subject: [PATCH 47/52] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/4baeaa4d27e3 Author: Luke Chang <lchang@mozilla.com> Desc: Merge pull request #25347 from luke-chang/1079129_fullscreen_prompt_overlay_lockscreen Bug 1079129 - [Woodduck][Streaming] Lock screen is hidden by full screen prompt message, r=alive ======== https://hg.mozilla.org/integration/gaia-central/rev/f0669118f722 Author: Luke Chang <lchang@mozilla.com> Desc: Bug 1079129 - [Woodduck][Streaming] Lock screen is hidden by full screen prompt message --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index c2d921cc835..4f907a4b254 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "ab7de80c4557d74c2b2dcb19eba4ec7febee30df", + "revision": "4baeaa4d27e37e016d90021fa5f8d75fea868ca6", "repo_path": "/integration/gaia-central" } From 60032a648e1cff89d8d4eaa498e70685781310b4 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 20:31:58 -0700 Subject: [PATCH 48/52] Bumping manifests a=b2g-bump --- b2g/config/dolphin/sources.xml | 2 +- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index ae61def33cb..6bfff19b93e 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index dc9e47fe3e4..99b9726d883 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index ffb0eb51ebf..490aae6422d 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index cc8d4321a47..b62ec5dd19e 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index dc9e47fe3e4..99b9726d883 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index 80125c63afe..159c514cdd9 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index d6d1772e9e3..5a06fb6afc3 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ </project> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 9efa0b3a754..0f67961fe79 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 6d7cd969657..a85fb8fa614 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index e87e949f9d4..37c4a40f983 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 6261a7b388f..852cc9af7d1 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="36c9d97497c22397b54ede75277863f5aa96e132"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> From 0dd79c17b60b3ee28a492531f3a8e1f24047921b Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 23:40:50 -0700 Subject: [PATCH 49/52] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/eb3cd285b797 Author: Albert <alberto.crespellperez@telefonica.com> Desc: Merge pull request #25454 from acperez/bug-1064710 Bug 1064710 - Add 3 MVNO for Germany. r=jaoo ======== https://hg.mozilla.org/integration/gaia-central/rev/e660a3ecf37e Author: Albert <alberto.crespellperez@telefonica.com> Desc: Bug 1064710 - Add 3 MVNO for Germany. r=jaoo --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 4f907a4b254..4270ef7ce51 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "4baeaa4d27e37e016d90021fa5f8d75fea868ca6", + "revision": "eb3cd285b797bec69311da50abe0f74293f12938", "repo_path": "/integration/gaia-central" } From 92ef5dd5909af563ccc0546b148e8b9e43761320 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Sun, 26 Oct 2014 23:47:04 -0700 Subject: [PATCH 50/52] Bumping manifests a=b2g-bump --- b2g/config/dolphin/sources.xml | 2 +- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 6bfff19b93e..a69e4eec28d 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 99b9726d883..9d32c35386a 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 490aae6422d..69e90351096 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index b62ec5dd19e..5c4d923c10a 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 99b9726d883..9d32c35386a 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index 159c514cdd9..41bd88112ee 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 5a06fb6afc3..9b0570a2f90 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ </project> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 0f67961fe79..6f716d97a94 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index a85fb8fa614..914655c9c2e 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 37c4a40f983..7ff083f9706 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index 852cc9af7d1..b7cdce37058 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="a12668c3e8cbe7bafdf6116cab02feed228a7f49"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> From aa79e1c7c6be6f48cee5221e638ea2f10dce3ce6 Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Mon, 27 Oct 2014 00:55:49 -0700 Subject: [PATCH 51/52] Bumping gaia.json for 2 gaia revision(s) a=gaia-bump ======== https://hg.mozilla.org/integration/gaia-central/rev/9f4db6bcede8 Author: John Hu <johu@mozilla.com> Desc: Merge pull request #25247 from huchengtw-moz/bug-1074040-fork-add-landing-app Bug 1074040 fork add landing app, r=alive, evelyn ======== https://hg.mozilla.org/integration/gaia-central/rev/b2b4f88b02dd Author: John Hu <johu@mozilla.com> Desc: Bug 1074040 - [Stingray] fork system, remove useless modules and add support of landing app --- b2g/config/gaia.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index 4270ef7ce51..323947dc953 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -4,6 +4,6 @@ "remote": "", "branch": "" }, - "revision": "eb3cd285b797bec69311da50abe0f74293f12938", + "revision": "9f4db6bcede8557cb8ac746fc977bc50bff2278b", "repo_path": "/integration/gaia-central" } From d00eb3f979306ac1d0ba1213294eaff4492ce51b Mon Sep 17 00:00:00 2001 From: B2G Bumper Bot <release+b2gbumper@mozilla.com> Date: Mon, 27 Oct 2014 01:01:58 -0700 Subject: [PATCH 52/52] Bumping manifests a=b2g-bump --- b2g/config/dolphin/sources.xml | 2 +- b2g/config/emulator-ics/sources.xml | 2 +- b2g/config/emulator-jb/sources.xml | 2 +- b2g/config/emulator-kk/sources.xml | 2 +- b2g/config/emulator/sources.xml | 2 +- b2g/config/flame-kk/sources.xml | 2 +- b2g/config/flame/sources.xml | 2 +- b2g/config/hamachi/sources.xml | 2 +- b2g/config/helix/sources.xml | 2 +- b2g/config/nexus-4/sources.xml | 2 +- b2g/config/wasabi/sources.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index a69e4eec28d..c341e4c2a88 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index 9d32c35386a..b32e9c29b22 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index 69e90351096..01a6a4975e6 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 5c4d923c10a..ae3408e523a 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index 9d32c35386a..b32e9c29b22 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,7 +19,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd88d860656c31c7da7bb310d6a160d0011b0961"/> diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index 41bd88112ee..f9bbaaa8616 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,7 +15,7 @@ <project name="platform_build" path="build" remote="b2g" revision="3a2947df41a480de1457a6dcdbf46ad0af70d8e0"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml index 9b0570a2f90..f372eefd6a5 100644 --- a/b2g/config/flame/sources.xml +++ b/b2g/config/flame/sources.xml @@ -17,7 +17,7 @@ </project> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/hamachi/sources.xml b/b2g/config/hamachi/sources.xml index 6f716d97a94..388a5deca78 100644 --- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/helix/sources.xml b/b2g/config/helix/sources.xml index 914655c9c2e..165a8eeac70 100644 --- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -15,7 +15,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/> diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 7ff083f9706..dd90e1bcb34 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,7 +17,7 @@ </project> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> - <project name="gaia" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="moztt" path="external/moztt" remote="b2g" revision="562d357b72279a9e35d4af5aeecc8e1ffa2f44f1"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="be8b952fde51d8c83748b41ce232f02b2218451d"/> diff --git a/b2g/config/wasabi/sources.xml b/b2g/config/wasabi/sources.xml index b7cdce37058..bf98b273d20 100644 --- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -17,7 +17,7 @@ <copyfile dest="Makefile" src="core/root.mk"/> </project> <project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/> - <project name="gaia.git" path="gaia" remote="mozillaorg" revision="cad4f66205a428d52d1cf32b3cd2e259b9192873"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="0888735b2c5932624808147b85a60d698d9d7352"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="314f305d3163cc094e6fe7701d95a98fc180b639"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>