') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Speed up execution by offloading logging by danmoseley · Pull Request #75 · dotnet/api-docs-sync · GitHub
Skip to content

Speed up execution by offloading logging - #75

Merged
jeffhandley merged 9 commits into
dotnet:mainfrom
danmoseley:speed.up.logging
Aug 3, 2021
Merged

Speed up execution by offloading logging#75
jeffhandley merged 9 commits into
dotnet:mainfrom
danmoseley:speed.up.logging

Conversation

@danmoseley

@danmoseleydanmoseley commented Aug 2, 2021

Copy link
Copy Markdown

Move console writes to a separate thread.
On that thread, batch the calls to console.
Don't continue batching if the color changes.
Don't continue batching if it's been over a second. [Note, this isn't perfect; if another message doesn't come in for a while, it will wait. But it will never fail to write.]
Add logging to a file, since a large run will exhaust the console buffer.

With these changes, a small run was sped up from about 10-11 sec to 7 sec. When running over the whole tree, it can save minutes.

@stephentoub this is my first time using DataFlow blocks. Does it seem reasonable?

@stephentoub

stephentoub commented Aug 2, 2021

Copy link
Copy Markdown
Member

@stephentoub this is my first time using DataFlow blocks. Does it seem reasonable?

It's reasonable. But for this usage (just using a BufferBlock as a hand-off mechanism), it'd be better to use the newer channels library.

  • new BufferBlock => Channel.CreateUnbounded
  • OutputAvailableAsync => WaitToReadAsync
  • ReceiveAsync => ReadAsync
  • Post => TryWrite

Comment threadLibraries/Log.cs Outdated
Comment threadLibraries/Log.cs
Comment threadLibraries/ToTripleSlashPorter.cs
Comment threadLibraries/ToTripleSlashPorter.cs
Dan Moseleyand others added 2 commits August 2, 2021 16:57
Co-authored-by: Jeff Handley <jeffhandley@users.noreply.github.com>
Co-authored-by: Jeff Handley <jeffhandley@users.noreply.github.com>
@jeffhandley

Copy link
Copy Markdown
Member

CI is failing on what looks like a missing using statement to get Task into scope.

@danmoseley

Copy link
Copy Markdown
Author

OK, changed from DataFlow to Channels. Super easy!

@jeffhandley
jeffhandley merged commit 8e30f01 into dotnet:mainAug 3, 2021
@carlossanlopcarlossanlop mentioned this pull request Oct 20, 2021
14 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@danmoseley@stephentoub@jeffhandley