Kaydet (Commit) 2113ee54 authored tarafından Ashod Nakashian's avatar Ashod Nakashian Kaydeden (comit) Adolfo Jayme Barrientos

tdf#38837 Reduce power consumption by minimizing idle timers

Both the document statistics- and state-manager have their
own modified flags. There is a cyclic dependency between the
the two in that updating the document's statistics also marks
the document as modified. Of course when a document is edited
the statistics modified flag is set to trigger an update.

To avoid a perpetual cycle, the statistics manager resets the
document's modified state to that before setting the new
statistics. However, this doesn't reset the statistics
modified flag, which was set when the document was modified
by setting the new statistics. Hence, the statistics thinks
there are modifications in the document when there isn't.

This patch is to make DocumentStateManager::ResetModified()
symmetrical to DocumentStateManager::SetModified() by
reseting the modified flag of the statistics manager.

The idle CPU drops to nil on unmodified documents after this.
However, for modified documents the statistics is recalculated
perpetually until the document is saved. This will need a
different patch to fix.

Change-Id: Ib5936bc1acbda34fcac6a00ec46eaa31e4363885
Reviewed-on: https://gerrit.libreoffice.org/16774Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
(cherry picked from commit b0fde7a9)
Signed-off-by: 's avatarAdolfo Jayme Barrientos <fitojb@ubuntu.com>
üst baea35b4
...@@ -65,6 +65,7 @@ void DocumentStateManager::ResetModified() ...@@ -65,6 +65,7 @@ void DocumentStateManager::ResetModified()
// Bit 1: -> new state // Bit 1: -> new state
sal_IntPtr nCall = mbModified ? 1 : 0; sal_IntPtr nCall = mbModified ? 1 : 0;
mbModified = false; mbModified = false;
m_rDoc.GetDocumentStatisticsManager().GetDocStat().bModified = false;
m_rDoc.GetIDocumentUndoRedo().SetUndoNoModifiedPosition(); m_rDoc.GetIDocumentUndoRedo().SetUndoNoModifiedPosition();
if( nCall && m_rDoc.GetOle2Link().IsSet() ) if( nCall && m_rDoc.GetOle2Link().IsSet() )
{ {
......
...@@ -458,7 +458,7 @@ bool SwDocShell::SaveAs( SfxMedium& rMedium ) ...@@ -458,7 +458,7 @@ bool SwDocShell::SaveAs( SfxMedium& rMedium )
// Remember and preserve Modified-Flag without calling the Link // Remember and preserve Modified-Flag without calling the Link
// (for OLE; after Statement from MM) // (for OLE; after Statement from MM)
bool bIsModified = m_pDoc->getIDocumentState().IsModified(); const bool bIsModified = m_pDoc->getIDocumentState().IsModified();
m_pDoc->GetIDocumentUndoRedo().LockUndoNoModifiedPosition(); m_pDoc->GetIDocumentUndoRedo().LockUndoNoModifiedPosition();
Link<> aOldOLELnk( m_pDoc->GetOle2Link() ); Link<> aOldOLELnk( m_pDoc->GetOle2Link() );
m_pDoc->SetOle2Link( Link<>() ); m_pDoc->SetOle2Link( Link<>() );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment