diff options
author | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2017-01-06 10:48:18 -0500 |
---|---|---|
committer | Ashod Nakashian <ashnakash@gmail.com> | 2017-01-23 03:23:19 +0000 |
commit | 1c27286b9d5331634c073cd3e327bd941e61bbb6 (patch) | |
tree | a80286f43ddab83e79bfc3b1c720c36e20e80fb3 /desktop/source/lib | |
parent | d9cfbabc7fe13752daf02e2a8cfa38c72a30fb29 (diff) |
Lok: support for batch API calls
Mouse and keyboard operations typically
come in batches, and often each results in
tile invalidations and/or layout modifications.
Processing each input event on its own, then processing
the resulting output event is very costly and unecessary
when we know there is more of the same.
The new API adds support for batching such related
input events by disabling the output events generated
by Core until the batch is done. The client can
then process the resulting events, which will
be compressed and deduplicated.
Change-Id: Id381dab807186d010021a8778ee440074a739920
Reviewed-on: https://gerrit.libreoffice.org/33402
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Ashod Nakashian <ashnakash@gmail.com>
Diffstat (limited to 'desktop/source/lib')
-rw-r--r-- | desktop/source/lib/init.cxx | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index d29a6950c301..3df7b2eda5d8 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -537,6 +537,8 @@ static unsigned char* doc_renderFont(LibreOfficeKitDocument* pThis, int* pFontWidth, int* pFontHeight); static char* doc_getPartHash(LibreOfficeKitDocument* pThis, int nPart); +static void doc_beginBatch(LibreOfficeKitDocument* pThis); +static void doc_endBatch(LibreOfficeKitDocument* pThis); LibLODocument_Impl::LibLODocument_Impl(const uno::Reference <css::lang::XComponent> &xComponent) : mxComponent(xComponent) @@ -583,6 +585,8 @@ LibLODocument_Impl::LibLODocument_Impl(const uno::Reference <css::lang::XCompone m_pDocumentClass->renderFont = doc_renderFont; m_pDocumentClass->getPartHash = doc_getPartHash; + m_pDocumentClass->beginBatch = doc_beginBatch; + m_pDocumentClass->endBatch = doc_endBatch; gDocumentClass = m_pDocumentClass; } @@ -2707,6 +2711,28 @@ unsigned char* doc_renderFont(LibreOfficeKitDocument* /*pThis*/, return nullptr; } +static void doc_beginBatch(LibreOfficeKitDocument* pThis) +{ + SolarMutexGuard aGuard; + + LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis); + for (const auto& pair : pDocument->mpCallbackFlushHandlers) + { + pair.second->setEventLatch(true); + } +} + +static void doc_endBatch(LibreOfficeKitDocument* pThis) +{ + SolarMutexGuard aGuard; + + LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis); + for (const auto& pair : pDocument->mpCallbackFlushHandlers) + { + pair.second->setEventLatch(false); + } +} + static char* lo_getError (LibreOfficeKit *pThis) { SolarMutexGuard aGuard; |