aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cocoa/PlatCocoa.mm28
-rw-r--r--gtk/PlatGTK.cxx22
-rw-r--r--include/Platform.h2
-rw-r--r--qt/ScintillaEditBase/PlatQt.cpp27
-rw-r--r--scripts/HeaderOrder.txt2
-rw-r--r--src/Document.cxx10
-rw-r--r--src/EditView.cxx49
-rw-r--r--src/ElapsedPeriod.h35
-rw-r--r--win32/PlatWin.cxx48
-rw-r--r--win32/ScintillaWin.cxx6
-rw-r--r--win32/deps.mak30
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 \