diff options
-rw-r--r-- | cocoa/PlatCocoa.mm | 28 | ||||
-rw-r--r-- | gtk/PlatGTK.cxx | 22 | ||||
-rw-r--r-- | include/Platform.h | 2 | ||||
-rw-r--r-- | qt/ScintillaEditBase/PlatQt.cpp | 27 | ||||
-rw-r--r-- | scripts/HeaderOrder.txt | 2 | ||||
-rw-r--r-- | src/Document.cxx | 10 | ||||
-rw-r--r-- | src/EditView.cxx | 49 | ||||
-rw-r--r-- | src/ElapsedPeriod.h | 35 | ||||
-rw-r--r-- | win32/PlatWin.cxx | 48 | ||||
-rw-r--r-- | win32/ScintillaWin.cxx | 6 | ||||
-rw-r--r-- | win32/deps.mak | 30 |
11 files changed, 94 insertions, 165 deletions
diff --git a/cocoa/PlatCocoa.mm b/cocoa/PlatCocoa.mm index 763778342..fce8fad3e 100644 --- a/cocoa/PlatCocoa.mm +++ b/cocoa/PlatCocoa.mm @@ -1781,34 +1781,6 @@ void Menu::Show(Point, Window &) { // takes care to show it properly. } -//----------------- ElapsedTime -------------------------------------------------------------------- - -// ElapsedTime is used for precise performance measurements during development -// and not for anything a user sees. - -ElapsedTime::ElapsedTime() { - struct timeval curTime; - gettimeofday(&curTime, NULL); - - bigBit = curTime.tv_sec; - littleBit = curTime.tv_usec; -} - -double ElapsedTime::Duration(bool reset) { - struct timeval curTime; - gettimeofday(&curTime, NULL); - long endBigBit = curTime.tv_sec; - long endLittleBit = curTime.tv_usec; - double result = 1000000.0 * (endBigBit - bigBit); - result += endLittleBit - littleBit; - result /= 1000000.0; - if (reset) { - bigBit = endBigBit; - littleBit = endLittleBit; - } - return result; -} - //----------------- Platform ----------------------------------------------------------------------- ColourDesired Platform::Chrome() { diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx index da04bae61..f9ee02bfc 100644 --- a/gtk/PlatGTK.cxx +++ b/gtk/PlatGTK.cxx @@ -1914,13 +1914,6 @@ void Menu::Show(Point pt, Window &w) { #endif } -ElapsedTime::ElapsedTime() { - GTimeVal curTime; - g_get_current_time(&curTime); - bigBit = curTime.tv_sec; - littleBit = curTime.tv_usec; -} - class DynamicLibraryImpl : public DynamicLibrary { protected: GModule* m; @@ -1957,21 +1950,6 @@ DynamicLibrary *DynamicLibrary::Load(const char *modulePath) { return static_cast<DynamicLibrary *>( new DynamicLibraryImpl(modulePath) ); } -double ElapsedTime::Duration(bool reset) { - GTimeVal curTime; - g_get_current_time(&curTime); - long endBigBit = curTime.tv_sec; - long endLittleBit = curTime.tv_usec; - double result = 1000000.0 * (endBigBit - bigBit); - result += endLittleBit - littleBit; - result /= 1000000.0; - if (reset) { - bigBit = endBigBit; - littleBit = endLittleBit; - } - return result; -} - ColourDesired Platform::Chrome() { return ColourDesired(0xe0, 0xe0, 0xe0); } diff --git a/include/Platform.h b/include/Platform.h index 3d51823b5..a97dded28 100644 --- a/include/Platform.h +++ b/include/Platform.h @@ -438,7 +438,7 @@ public: void Show(Point pt, Window &w); }; -class ElapsedTime { +class[[deprecated("Use ElapsedPeriod")]] ElapsedTime { long bigBit; long littleBit; public: diff --git a/qt/ScintillaEditBase/PlatQt.cpp b/qt/ScintillaEditBase/PlatQt.cpp index fb7904f05..f1857e662 100644 --- a/qt/ScintillaEditBase/PlatQt.cpp +++ b/qt/ScintillaEditBase/PlatQt.cpp @@ -35,7 +35,6 @@ #include <QTextLayout> #include <QTextLine> #include <QLibrary> -#include <QElapsedTimer> #include <cstdio> namespace Scintilla { @@ -1210,30 +1209,4 @@ void Platform::Assert(const char *c, const char *file, int line) } } -//---------------------------------------------------------------------- - -static QElapsedTimer timer; - -ElapsedTime::ElapsedTime() : bigBit(0), littleBit(0) -{ - if (!timer.isValid()) { - timer.start(); - } - qint64 ns64Now = timer.nsecsElapsed(); - bigBit = static_cast<unsigned long>(ns64Now >> 32); - littleBit = static_cast<unsigned long>(ns64Now & 0xFFFFFFFF); -} - -double ElapsedTime::Duration(bool reset) -{ - qint64 ns64Now = timer.nsecsElapsed(); - qint64 ns64Start = (static_cast<qint64>(static_cast<unsigned long>(bigBit)) << 32) + static_cast<unsigned long>(littleBit); - double result = ns64Now - ns64Start; - if (reset) { - bigBit = static_cast<unsigned long>(ns64Now >> 32); - littleBit = static_cast<unsigned long>(ns64Now & 0xFFFFFFFF); - } - return result / 1000000000.0; // 1 billion nanoseconds in a second -} - } diff --git a/scripts/HeaderOrder.txt b/scripts/HeaderOrder.txt index d15bb5a87..bd8a3b215 100644 --- a/scripts/HeaderOrder.txt +++ b/scripts/HeaderOrder.txt @@ -44,6 +44,7 @@ #include <iterator> #include <functional> #include <memory> +#include <chrono> #include <regex> #include <iostream> #include <sstream> @@ -144,6 +145,7 @@ #include "MarginView.h" #include "EditView.h" #include "Editor.h" +#include "ElapsedPeriod.h" #include "AutoComplete.h" #include "ScintillaBase.h" diff --git a/src/Document.cxx b/src/Document.cxx index e576c5db3..6efcb37fa 100644 --- a/src/Document.cxx +++ b/src/Document.cxx @@ -18,6 +18,7 @@ #include <forward_list> #include <algorithm> #include <memory> +#include <chrono> #ifndef NO_CXX11_REGEX #include <regex> @@ -43,6 +44,7 @@ #include "Document.h" #include "RESearch.h" #include "UniConversion.h" +#include "ElapsedPeriod.h" using namespace Scintilla; @@ -2108,9 +2110,9 @@ void Document::StyleToAdjustingLineDuration(Sci::Position pos) { const double alpha = 0.25; const Sci::Line lineFirst = SciLineFromPosition(GetEndStyled()); - ElapsedTime etStyling; + ElapsedPeriod epStyling; EnsureStyledTo(pos); - const double durationStyling = etStyling.Duration(); + const double durationStyling = epStyling.Duration(); const Sci::Line lineLast = SciLineFromPosition(GetEndStyled()); if (lineLast >= lineFirst + 8) { // Only adjust for styling multiple lines to avoid instability @@ -2924,7 +2926,7 @@ Sci::Position Cxx11RegexFindText(const Document *doc, Sci::Position minPos, Sci: bool caseSensitive, Sci::Position *length, RESearch &search) { const RESearchRange resr(doc, minPos, maxPos); try { - //ElapsedTime et; + //ElapsedPeriod ep; std::regex::flag_type flagsRe = std::regex::ECMAScript; // Flags that apper to have no effect: // | std::regex::collate | std::regex::extended; @@ -2969,7 +2971,7 @@ Sci::Position Cxx11RegexFindText(const Document *doc, Sci::Position minPos, Sci: // Example - search in doc/ScintillaHistory.html for // [[:upper:]]eta[[:space:]] // On MacBook, normally around 1 second but with locale imbued -> 14 seconds. - //double durSearch = et.Duration(true); + //const double durSearch = ep.Duration(true); //Platform::DebugPrintf("Search:%9.6g \n", durSearch); return posMatch; } catch (std::regex_error &) { diff --git a/src/EditView.cxx b/src/EditView.cxx index 8522ba419..5c9bb7ff4 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -21,6 +21,7 @@ #include <algorithm> #include <iterator> #include <memory> +#include <chrono> #include "Platform.h" @@ -53,6 +54,7 @@ #include "EditModel.h" #include "MarginView.h" #include "EditView.h" +#include "ElapsedPeriod.h" using namespace Scintilla; @@ -2010,11 +2012,12 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan } // Loop on visible lines - //double durLayout = 0.0; - //double durPaint = 0.0; - //double durCopy = 0.0; - //ElapsedTime etWhole; - +#if defined(TIME_PAINTING) + double durLayout = 0.0; + double durPaint = 0.0; + double durCopy = 0.0; + ElapsedPeriod epWhole; +#endif const bool bracesIgnoreStyle = ((vsDraw.braceHighlightIndicatorSet && (model.bracesMatchStyle == STYLE_BRACELIGHT)) || (vsDraw.braceBadLightIndicatorSet && (model.bracesMatchStyle == STYLE_BRACEBAD))); @@ -2044,15 +2047,18 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan // Copy this line and its styles from the document into local arrays // and determine the x position at which each character starts. - //ElapsedTime et; +#if defined(TIME_PAINTING) + ElapsedPeriod ep; +#endif if (lineDoc != lineDocPrevious) { ll.Set(0); ll.Set(RetrieveLineLayout(lineDoc, model)); LayoutLine(model, lineDoc, surface, vsDraw, ll, model.wrapWidth); lineDocPrevious = lineDoc; } - //durLayout += et.Duration(true); - +#if defined(TIME_PAINTING) + durLayout += ep.Duration(true); +#endif if (ll) { ll->containsCaret = !hideSelection && (lineDoc == lineCaret); ll->hotspot = model.GetHotSpotRange(); @@ -2077,8 +2083,9 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan } DrawLine(surface, model, vsDraw, ll, lineDoc, visibleLine, xStart, rcLine, subLine, phase); - //durPaint += et.Duration(true); - +#if defined(TIME_PAINTING) + durPaint += ep.Duration(true); +#endif // Restore the previous styles for the brace highlights in case layout is in cache. ll->RestoreBracesHighlight(rangeLine, model.braces, bracesIgnoreStyle); @@ -2100,7 +2107,9 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan lineWidthMaxSeen = std::max( lineWidthMaxSeen, static_cast<int>(ll->positions[ll->numCharsInLine])); - //durCopy += et.Duration(true); +#if defined(TIME_PAINTING) + durCopy += ep.Duration(true); +#endif } if (!bufferedDraw) { @@ -2112,9 +2121,10 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan } } ll.Set(0); - //if (durPaint < 0.00000001) - // durPaint = 0.00000001; - +#if defined(TIME_PAINTING) + if (durPaint < 0.00000001) + durPaint = 0.00000001; +#endif // Right column limit indicator PRectangle rcBeyondEOF = (vsDraw.marginInside) ? rcClient : rcArea; rcBeyondEOF.left = static_cast<XYPOSITION>(vsDraw.textStart); @@ -2138,11 +2148,12 @@ void EditView::PaintText(Surface *surfaceWindow, const EditModel &model, PRectan } } } - //Platform::DebugPrintf("start display %d, offset = %d\n", pdoc->Length(), xOffset); - - //Platform::DebugPrintf( - //"Layout:%9.6g Paint:%9.6g Ratio:%9.6g Copy:%9.6g Total:%9.6g\n", - //durLayout, durPaint, durLayout / durPaint, durCopy, etWhole.Duration()); + //Platform::DebugPrintf("start display %d, offset = %d\n", model.pdoc->Length(), model.xOffset); +#if defined(TIME_PAINTING) + Platform::DebugPrintf( + "Layout:%9.6g Paint:%9.6g Ratio:%9.6g Copy:%9.6g Total:%9.6g\n", + durLayout, durPaint, durLayout / durPaint, durCopy, epWhole.Duration()); +#endif } } diff --git a/src/ElapsedPeriod.h b/src/ElapsedPeriod.h new file mode 100644 index 000000000..bbbc6d7fb --- /dev/null +++ b/src/ElapsedPeriod.h @@ -0,0 +1,35 @@ +// Scintilla source code edit control +/** @file ElapsedPeriod.h + ** Encapsulate C++ <chrono> to simplify use. + **/ +// Copyright 2018 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef ELAPSEDPERIOD_H +#define ELAPSEDPERIOD_H + +namespace Scintilla { + +// Simplified access to high precision timing. +class ElapsedPeriod { + std::chrono::high_resolution_clock::time_point tp; +public: + /// Capture the moment + ElapsedPeriod() : tp(std::chrono::high_resolution_clock::now()) { + } + /// Return duration as floating point seconds + double Duration(bool reset=false) { + std::chrono::high_resolution_clock::time_point tpNow = + std::chrono::high_resolution_clock::now(); + const std::chrono::duration<double> stylingDuration = + std::chrono::duration_cast<std::chrono::duration<double>>(tpNow - tp); + if (reset) { + tp = tpNow; + } + return stylingDuration.count(); + } +}; + +} + +#endif diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index 4f7d59562..ec215bb38 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -2901,54 +2901,6 @@ void Menu::Show(Point pt, Window &w) { Destroy(); } -static bool initialisedET = false; -static bool usePerformanceCounter = false; -static LARGE_INTEGER frequency; - -ElapsedTime::ElapsedTime() { - if (!initialisedET) { - usePerformanceCounter = ::QueryPerformanceFrequency(&frequency) != 0; - initialisedET = true; - } - if (usePerformanceCounter) { - LARGE_INTEGER timeVal; - ::QueryPerformanceCounter(&timeVal); - bigBit = timeVal.HighPart; - littleBit = timeVal.LowPart; - } else { - bigBit = clock(); - littleBit = 0; - } -} - -double ElapsedTime::Duration(bool reset) { - double result; - long endBigBit; - long endLittleBit; - - if (usePerformanceCounter) { - LARGE_INTEGER lEnd; - ::QueryPerformanceCounter(&lEnd); - endBigBit = lEnd.HighPart; - endLittleBit = lEnd.LowPart; - LARGE_INTEGER lBegin; - lBegin.HighPart = bigBit; - lBegin.LowPart = littleBit; - const double elapsed = static_cast<double>(lEnd.QuadPart - lBegin.QuadPart); - result = elapsed / static_cast<double>(frequency.QuadPart); - } else { - endBigBit = clock(); - endLittleBit = 0; - const double elapsed = endBigBit - bigBit; - result = elapsed / CLOCKS_PER_SEC; - } - if (reset) { - bigBit = endBigBit; - littleBit = endLittleBit; - } - return result; -} - class DynamicLibraryImpl : public DynamicLibrary { protected: HMODULE h; diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 480c82e64..c1c54b5d1 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -21,6 +21,7 @@ #include <map> #include <algorithm> #include <memory> +#include <chrono> #undef _WIN32_WINNT #define _WIN32_WINNT 0x0500 @@ -80,6 +81,7 @@ #include "MarginView.h" #include "EditView.h" #include "Editor.h" +#include "ElapsedPeriod.h" #include "AutoComplete.h" #include "ScintillaBase.h" @@ -813,7 +815,7 @@ void ScintillaWin::AddCharUTF16(wchar_t const *wcs, unsigned int wclen) { } sptr_t ScintillaWin::WndPaint(uptr_t wParam) { - //ElapsedTime et; + //ElapsedPeriod ep; // Redirect assertions to debug output and save current state const bool assertsPopup = Platform::ShowAssertionPopUps(false); @@ -878,7 +880,7 @@ sptr_t ScintillaWin::WndPaint(uptr_t wParam) { // Restore debug output state Platform::ShowAssertionPopUps(assertsPopup); - //Platform::DebugPrintf("Paint took %g\n", et.Duration()); + //Platform::DebugPrintf("Paint took %g\n", ep.Duration()); return 0l; } diff --git a/win32/deps.mak b/win32/deps.mak index 9ab7bb6b1..a8e2366d4 100644 --- a/win32/deps.mak +++ b/win32/deps.mak @@ -1,7 +1,8 @@ HanjaDic.o: HanjaDic.cxx ../src/UniConversion.h HanjaDic.h PlatWin.o: PlatWin.cxx ../include/Platform.h ../lexlib/StringCopy.h \ ../src/XPM.h ../src/UniConversion.h ../src/DBCS.h ../src/FontQuality.h -ScintillaDLL.o: ScintillaDLL.cxx +ScintillaDLL.o: ScintillaDLL.cxx ../include/Scintilla.h \ + ../include/Sci_Position.h ScintillaWin.h ScintillaWin.o: ScintillaWin.cxx ../include/Platform.h \ ../include/ILoader.h ../include/Sci_Position.h ../include/ILexer.h \ ../include/Scintilla.h ../lexlib/StringCopy.h ../src/Position.h \ @@ -12,8 +13,9 @@ ScintillaWin.o: ScintillaWin.cxx ../include/Platform.h \ ../src/Decoration.h ../src/CaseFolder.h ../src/Document.h \ ../src/CaseConvert.h ../src/UniConversion.h ../src/Selection.h \ ../src/PositionCache.h ../src/EditModel.h ../src/MarginView.h \ - ../src/EditView.h ../src/Editor.h ../src/AutoComplete.h \ - ../src/ScintillaBase.h PlatWin.h HanjaDic.h + ../src/EditView.h ../src/Editor.h ../src/ElapsedPeriod.h \ + ../src/AutoComplete.h ../src/ScintillaBase.h PlatWin.h HanjaDic.h \ + ScintillaWin.h AutoComplete.o: ../src/AutoComplete.cxx ../include/Platform.h \ ../include/Scintilla.h ../include/Sci_Position.h \ ../lexlib/CharacterSet.h ../src/Position.h ../src/AutoComplete.h @@ -48,7 +50,7 @@ Document.o: ../src/Document.cxx ../include/Platform.h \ ../src/Partitioning.h ../src/RunStyles.h ../src/CellBuffer.h \ ../src/PerLine.h ../src/CharClassify.h ../src/Decoration.h \ ../src/CaseFolder.h ../src/Document.h ../src/RESearch.h \ - ../src/UniConversion.h + ../src/UniConversion.h ../src/ElapsedPeriod.h EditModel.o: ../src/EditModel.cxx ../include/Platform.h \ ../include/ILoader.h ../include/Sci_Position.h ../include/ILexer.h \ ../include/Scintilla.h ../lexlib/StringCopy.h ../src/Position.h \ @@ -60,14 +62,14 @@ EditModel.o: ../src/EditModel.cxx ../include/Platform.h \ ../src/Selection.h ../src/PositionCache.h ../src/EditModel.h Editor.o: ../src/Editor.cxx ../include/Platform.h ../include/ILoader.h \ ../include/Sci_Position.h ../include/ILexer.h ../include/Scintilla.h \ - ../lexlib/StringCopy.h ../src/Position.h ../src/UniqueString.h \ - ../src/SplitVector.h ../src/Partitioning.h ../src/RunStyles.h \ - ../src/ContractionState.h ../src/CellBuffer.h ../src/PerLine.h \ - ../src/KeyMap.h ../src/Indicator.h ../src/LineMarker.h ../src/Style.h \ - ../src/ViewStyle.h ../src/CharClassify.h ../src/Decoration.h \ - ../src/CaseFolder.h ../src/Document.h ../src/UniConversion.h \ - ../src/Selection.h ../src/PositionCache.h ../src/EditModel.h \ - ../src/MarginView.h ../src/EditView.h ../src/Editor.h + ../lexlib/StringCopy.h ../lexlib/CharacterSet.h ../src/Position.h \ + ../src/UniqueString.h ../src/SplitVector.h ../src/Partitioning.h \ + ../src/RunStyles.h ../src/ContractionState.h ../src/CellBuffer.h \ + ../src/PerLine.h ../src/KeyMap.h ../src/Indicator.h ../src/LineMarker.h \ + ../src/Style.h ../src/ViewStyle.h ../src/CharClassify.h \ + ../src/Decoration.h ../src/CaseFolder.h ../src/Document.h \ + ../src/UniConversion.h ../src/Selection.h ../src/PositionCache.h \ + ../src/EditModel.h ../src/MarginView.h ../src/EditView.h ../src/Editor.h EditView.o: ../src/EditView.cxx ../include/Platform.h \ ../include/ILoader.h ../include/Sci_Position.h ../include/ILexer.h \ ../include/Scintilla.h ../lexlib/StringCopy.h ../lexlib/CharacterSet.h \ @@ -78,7 +80,7 @@ EditView.o: ../src/EditView.cxx ../include/Platform.h \ ../src/CharClassify.h ../src/Decoration.h ../src/CaseFolder.h \ ../src/Document.h ../src/UniConversion.h ../src/Selection.h \ ../src/PositionCache.h ../src/EditModel.h ../src/MarginView.h \ - ../src/EditView.h + ../src/EditView.h ../src/ElapsedPeriod.h ExternalLexer.o: ../src/ExternalLexer.cxx ../include/Platform.h \ ../include/ILexer.h ../include/Sci_Position.h ../include/Scintilla.h \ ../include/SciLexer.h ../lexlib/LexerModule.h ../src/Catalogue.h \ @@ -146,7 +148,7 @@ Accessor.o: ../lexlib/Accessor.cxx ../include/ILexer.h \ ../lexlib/PropSetSimple.h ../lexlib/WordList.h ../lexlib/LexAccessor.h \ ../lexlib/Accessor.h CharacterCategory.o: ../lexlib/CharacterCategory.cxx \ - ../lexlib/StringCopy.h ../lexlib/CharacterCategory.h + ../lexlib/CharacterCategory.h CharacterSet.o: ../lexlib/CharacterSet.cxx ../lexlib/CharacterSet.h DefaultLexer.o: ../lexlib/DefaultLexer.cxx ../include/ILexer.h \ ../include/Sci_Position.h ../include/Scintilla.h ../include/SciLexer.h \ |