merge b2g-inbound to mozilla-central
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Tue, 03 Dec 2013 10:41:51 +0100
changeset 174110 8648aa476eefd28ed305b6d0e648d9c802f4c327
parent 174084 41a3163ac71405b46341ef57e2cf63417d753a26 (current diff)
parent 174109 3c57c72b4b6155a332a1036d1390869b13fb832d (diff)
child 174111 4bf430d990e5b4f74f5876b4cabe1b3427977164
child 174118 e6b278c315bcb08d8b9c8884d501f9fae7df0889
child 174195 24161557228b65b567975a2ce36ee58a50b1a535
child 174234 669ccbd09ebf791eba7e58451cb940bdfaa2f5da
push id445
push userffxbld
push dateMon, 10 Mar 2014 22:05:19 +0000
treeherdermozilla-release@dc38b741b04e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone28.0a1
first release with
nightly linux32
8648aa476eef / 28.0a1 / 20131203030202 / files
nightly linux64
8648aa476eef / 28.0a1 / 20131203030202 / files
nightly mac
8648aa476eef / 28.0a1 / 20131203030202 / files
nightly win32
8648aa476eef / 28.0a1 / 20131203030202 / files
nightly win64
8648aa476eef / 28.0a1 / 20131203030202 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
merge b2g-inbound to mozilla-central
browser/metro/theme/browser.css
--- a/b2g/components/FilePicker.js
+++ b/b2g/components/FilePicker.js
@@ -42,16 +42,17 @@ function FilePicker() {
 
 FilePicker.prototype = {
   classID: Components.ID('{436ff8f9-0acc-4b11-8ec7-e293efba3141}'),
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIFilePicker]),
 
   /* members */
 
   mParent: undefined,
+  mExtraProps: {},
   mFilterTypes: [],
   mFileEnumerator: undefined,
   mFilePickerShownCallback: undefined,
 
   /* methods */
 
   init: function(parent, title, mode) {
     this.mParent = parent;
@@ -80,16 +81,18 @@ FilePicker.prototype = {
   },
 
   appendFilters: function(filterMask) {
     // Ci.nsIFilePicker.filterHTML is not supported
     // Ci.nsIFilePicker.filterText is not supported
 
     if (filterMask & Ci.nsIFilePicker.filterImages) {
       this.mFilterTypes = this.mFilterTypes.concat(IMAGE_FILTERS);
+      // This property is needed for the gallery app pick activity.
+      this.mExtraProps['nocrop'] = true;
     }
 
     // Ci.nsIFilePicker.filterXML is not supported
     // Ci.nsIFilePicker.filterXUL is not supported
     // Ci.nsIFilePicker.filterApps is not supported
     // Ci.nsIFilePicker.filterAllowURLs is not supported
 
     if (filterMask & Ci.nsIFilePicker.filterVideo) {
@@ -112,16 +115,22 @@ FilePicker.prototype = {
 
     cpmm.addMessageListener('file-picked', this);
 
     let detail = {};
     if (this.mFilterTypes) {
        detail.type = this.mFilterTypes;
     }
 
+    for (let prop in this.mExtraProps) {
+      if (!(prop in detail)) {
+        detail[prop] = this.mExtraProps[prop];
+      }
+    }
+
     cpmm.sendAsyncMessage('file-picker', detail);
   },
 
   fireSuccess: function(file) {
     this.mFilesEnumerator = {
       QueryInterface: XPCOMUtils.generateQI([Ci.nsISimpleEnumerator]),
 
       mFiles: [file],
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,4 +1,4 @@
 {
-    "revision": "c2506884aba22b968d3ab1ad6c28f0782b22a17f", 
+    "revision": "001672effec8835928519312c1075a842af9166c", 
     "repo_path": "/integration/gaia-central"
 }
--- a/browser/metro/theme/browser.css
+++ b/browser/metro/theme/browser.css
@@ -317,20 +317,16 @@ documenttab[selected] .documenttab-selec
 }
 
 .scroller[orient="horizontal"] {
   min-height: @scroller_thickness@;
   height: @scroller_thickness@;
   min-width: @scroller_minimum@;
 }
 
-#browsers[input="imprecise"] browser {
-  overflow: hidden;
-}
-
 /* overlay buttons */
 
 .overlay-button {
   position: fixed;
   top: 50%;
   margin-top: -65px;
   width: 118px;
   height: 118px;
--- a/content/media/omx/MediaOmxReader.cpp
+++ b/content/media/omx/MediaOmxReader.cpp
@@ -32,16 +32,20 @@ MediaOmxReader::MediaOmxReader(AbstractM
   mAudioSeekTimeUs(-1),
   mSkipCount(0)
 {
 }
 
 MediaOmxReader::~MediaOmxReader()
 {
   ResetDecode();
+  VideoFrameContainer* container = mDecoder->GetVideoFrameContainer();
+  if (container) {
+    container->ClearCurrentFrame();
+  }
   mOmxDecoder.clear();
 }
 
 nsresult MediaOmxReader::Init(MediaDecoderReader* aCloneDonor)
 {
   return NS_OK;
 }
 
@@ -59,16 +63,22 @@ bool MediaOmxReader::IsDormantNeeded()
     return false;
   }
   return mOmxDecoder->IsDormantNeeded();
 }
 
 void MediaOmxReader::ReleaseMediaResources()
 {
   ResetDecode();
+  // Before freeing a video codec, all video buffers needed to be released
+  // even from graphics pipeline.
+  VideoFrameContainer* container = mDecoder->GetVideoFrameContainer();
+  if (container) {
+    container->ClearCurrentFrame();
+  }
   if (mOmxDecoder.get()) {
     mOmxDecoder->ReleaseMediaResources();
   }
 }
 
 void MediaOmxReader::ReleaseDecoder()
 {
   if (mOmxDecoder.get()) {
@@ -161,28 +171,16 @@ nsresult MediaOmxReader::ReadMetadata(Me
     mInfo.mAudio.mRate = sampleRate;
   }
 
  *aInfo = mInfo;
 
   return NS_OK;
 }
 
-// Resets all state related to decoding, emptying all buffers etc.
-nsresult MediaOmxReader::ResetDecode()
-{
-  MediaDecoderReader::ResetDecode();
-
-  VideoFrameContainer* container = mDecoder->GetVideoFrameContainer();
-  if (container) {
-    container->ClearCurrentFrame();
-  }
-  return NS_OK;
-}
-
 bool MediaOmxReader::DecodeVideoFrame(bool &aKeyframeSkip,
                                       int64_t aTimeThreshold)
 {
   // Record number of frames decoded and parsed. Automatically update the
   // stats counters using the AutoNotifyDecoded stack-based class.
   uint32_t parsed = 0, decoded = 0;
   AbstractMediaDecoder::AutoNotifyDecoded autoNotify(mDecoder, parsed, decoded);
 
@@ -342,22 +340,21 @@ bool MediaOmxReader::DecodeAudioData()
                                  frame.mAudioChannels));
   return true;
 }
 
 nsresult MediaOmxReader::Seek(int64_t aTarget, int64_t aStartTime, int64_t aEndTime, int64_t aCurrentTime)
 {
   NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
 
+  ResetDecode();
   VideoFrameContainer* container = mDecoder->GetVideoFrameContainer();
   if (container && container->GetImageContainer()) {
     container->GetImageContainer()->ClearAllImagesExceptFront();
   }
-  mVideoQueue.Reset();
-  mAudioQueue.Reset();
 
   mAudioSeekTimeUs = mVideoSeekTimeUs = aTarget;
 
   return DecodeToTarget(aTarget);
 }
 
 static uint64_t BytesToTime(int64_t offset, uint64_t length, uint64_t durationUs) {
   double perc = double(offset) / double(length);
--- a/content/media/omx/MediaOmxReader.h
+++ b/content/media/omx/MediaOmxReader.h
@@ -43,17 +43,16 @@ protected:
   // information used for creating OMX decoder such as video/audio codec.
   virtual nsresult InitOmxDecoder();
 
 public:
   MediaOmxReader(AbstractMediaDecoder* aDecoder);
   ~MediaOmxReader();
 
   virtual nsresult Init(MediaDecoderReader* aCloneDonor);
-  virtual nsresult ResetDecode();
 
   virtual void NotifyDataArrived(const char* aBuffer, uint32_t aLength, int64_t aOffset);
 
   virtual bool DecodeAudioData();
   virtual bool DecodeVideoFrame(bool &aKeyframeSkip,
                                 int64_t aTimeThreshold);
 
   virtual bool HasAudio()
--- a/dom/ipc/ProcessPriorityManager.cpp
+++ b/dom/ipc/ProcessPriorityManager.cpp
@@ -1040,17 +1040,19 @@ ParticularProcessPriorityManager::ShutDo
 
   UnregisterWakeLockObserver(this);
 
   if (mResetPriorityTimer) {
     mResetPriorityTimer->Cancel();
     mResetPriorityTimer = nullptr;
   }
 
-  ProcessPriorityManager::RemoveFromBackgroundLRUPool(mContentParent);
+  if (mPriority == PROCESS_PRIORITY_BACKGROUND && !IsPreallocated()) {
+    ProcessPriorityManager::RemoveFromBackgroundLRUPool(mContentParent);
+  }
 
   mContentParent = nullptr;
 }
 
 void
 ProcessPriorityManagerImpl::FireTestOnlyObserverNotification(
   const char* aTopic,
   const nsACString& aData /* = EmptyCString() */)
--- a/dom/speakermanager/SpeakerManager.cpp
+++ b/dom/speakermanager/SpeakerManager.cpp
@@ -105,20 +105,22 @@ SpeakerManager::DispatchSimpleEvent(cons
     NS_ERROR("Failed to dispatch the event!!!");
     return;
   }
 }
 
 void
 SpeakerManager::Init(nsPIDOMWindow* aWindow)
 {
-  BindToOwner(aWindow->IsOuterWindow() ?
-    aWindow->GetCurrentInnerWindow() : aWindow);
+  BindToOwner(aWindow);
 
-  mVisible = !GetOwner()->IsBackground();
+  nsCOMPtr<nsIDocShell> docshell = do_GetInterface(GetOwner());
+  NS_ENSURE_TRUE_VOID(docshell);
+  docshell->GetIsActive(&mVisible);
+
   nsCOMPtr<nsIDOMEventTarget> target = do_QueryInterface(GetOwner());
   NS_ENSURE_TRUE_VOID(target);
 
   target->AddSystemEventListener(NS_LITERAL_STRING("visibilitychange"),
                                  this,
                                  /* useCapture = */ true,
                                  /* wantsUntrusted = */ false);
 }
--- a/widget/gonk/HwcComposer2D.cpp
+++ b/widget/gonk/HwcComposer2D.cpp
@@ -520,16 +520,18 @@ HwcComposer2D::Render(EGLDisplay dpy, EG
         mList->hwLayers[mList->numHwLayers - 1].handle = fbsurface->lastHandle;
         mList->hwLayers[mList->numHwLayers - 1].acquireFenceFd = fbsurface->lastFenceFD;
     } else {
         mList->numHwLayers = 2;
         mList->hwLayers[0].hints = 0;
         mList->hwLayers[0].compositionType = HWC_BACKGROUND;
         mList->hwLayers[0].flags = HWC_SKIP_LAYER;
         mList->hwLayers[0].backgroundColor = {0};
+        mList->hwLayers[0].acquireFenceFd = -1;
+        mList->hwLayers[0].releaseFenceFd = -1;
         mList->hwLayers[0].displayFrame = {0, 0, mScreenRect.width, mScreenRect.height};
         Prepare(fbsurface->lastHandle, fbsurface->lastFenceFD);
     }
 
     // GPU or partial HWC Composition
     Commit();
 
     GetGonkDisplay()->SetFBReleaseFd(mList->hwLayers[mList->numHwLayers - 1].releaseFenceFd);
--- a/widget/gonk/libdisplay/GonkDisplayJB.cpp
+++ b/widget/gonk/libdisplay/GonkDisplayJB.cpp
@@ -229,16 +229,18 @@ GonkDisplayJB::Post(buffer_handle_t buf,
     mList->retireFenceFd = -1;
     mList->numHwLayers = 2;
     mList->flags = HWC_GEOMETRY_CHANGED;
     mList->hwLayers[0].compositionType = HWC_BACKGROUND;
     mList->hwLayers[0].hints = 0;
     /* Skip this layer so the hwc module doesn't complain about null handles */
     mList->hwLayers[0].flags = HWC_SKIP_LAYER;
     mList->hwLayers[0].backgroundColor = {0};
+    mList->hwLayers[0].acquireFenceFd = -1;
+    mList->hwLayers[0].releaseFenceFd = -1;
     /* hwc module checks displayFrame even though it shouldn't */
     mList->hwLayers[0].displayFrame = r;
     mList->hwLayers[1].compositionType = HWC_FRAMEBUFFER_TARGET;
     mList->hwLayers[1].hints = 0;
     mList->hwLayers[1].flags = 0;
     mList->hwLayers[1].handle = buf;
     mList->hwLayers[1].transform = 0;
     mList->hwLayers[1].blending = HWC_BLENDING_PREMULT;