Bug 993019 - Handle scheduling rendering task for cross-process rotation. r=mattwoodrow, r=nical

This commit is contained in:
Jerry Shih 2014-04-27 22:22:00 -04:00
parent 93944b130b
commit 10b9bf0872
2 changed files with 24 additions and 4 deletions

View File

@ -738,11 +738,11 @@ SetShadowProperties(Layer* aLayer)
}
void
CompositorParent::ShadowLayersUpdated(LayerTransactionParent* aLayerTree,
const TargetConfig& aTargetConfig,
bool aIsFirstPaint,
bool aScheduleComposite)
CompositorParent::ScheduleRotationOnCompositorThread(const TargetConfig& aTargetConfig,
bool aIsFirstPaint)
{
MOZ_ASSERT(IsInCompositorThread());
if (!aIsFirstPaint &&
!mCompositionManager->IsFirstPaint() &&
mCompositionManager->RequiresReorientation(aTargetConfig.orientation())) {
@ -752,6 +752,15 @@ CompositorParent::ShadowLayersUpdated(LayerTransactionParent* aLayerTree,
mForceCompositionTask = NewRunnableMethod(this, &CompositorParent::ForceComposition);
ScheduleTask(mForceCompositionTask, gfxPrefs::OrientationSyncMillis());
}
}
void
CompositorParent::ShadowLayersUpdated(LayerTransactionParent* aLayerTree,
const TargetConfig& aTargetConfig,
bool aIsFirstPaint,
bool aScheduleComposite)
{
ScheduleRotationOnCompositorThread(aTargetConfig, aIsFirstPaint);
// Instruct the LayerManager to update its render bounds now. Since all the orientation
// change, dimension change would be done at the stage, update the size here is free of
@ -1250,7 +1259,12 @@ CrossProcessCompositorParent::ShadowLayersUpdated(
bool aScheduleComposite)
{
uint64_t id = aLayerTree->GetId();
MOZ_ASSERT(id != 0);
MOZ_ASSERT(sIndirectLayerTrees[id].mParent);
sIndirectLayerTrees[id].mParent->ScheduleRotationOnCompositorThread(aTargetConfig, aIsFirstPaint);
Layer* shadowRoot = aLayerTree->GetRoot();
if (shadowRoot) {
SetShadowProperties(shadowRoot);

View File

@ -129,6 +129,12 @@ public:
virtual void ScheduleComposition();
void NotifyShadowTreeTransaction(uint64_t aId, bool aIsFirstPaint, bool aScheduleComposite);
/**
* Check rotation info and schedule a rendering task if needed.
* Only can be called from compositor thread.
*/
void ScheduleRotationOnCompositorThread(const TargetConfig& aTargetConfig, bool aIsFirstPaint);
/**
* Returns the unique layer tree identifier that corresponds to the root
* tree of this compositor.