From 5d90d1ed02c1f12e8cb4687f3f0ddf732f8c24a5 Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 15 Jan 2019 16:02:56 +0100 Subject: [PATCH] Updated Dapplo.Windows to fix an API bug, starting on performance tests which write AVI files to see if we can add some experimental video capture. --- .../Greenshot.Addon.Box.csproj | 4 +- .../Greenshot.Addon.Confluence.csproj | 4 +- .../Greenshot.Addon.Dropbox.csproj | 4 +- .../Greenshot.Addon.ExternalCommand.csproj | 4 +- .../Greenshot.Addon.Flickr.csproj | 4 +- .../Greenshot.Addon.GooglePhotos.csproj | 4 +- .../Greenshot.Addon.Imgur.csproj | 4 +- .../Greenshot.Addon.InternetExplorer.csproj | 6 +-- .../Greenshot.Addon.Jira.csproj | 4 +- .../Greenshot.Addon.LegacyEditor.csproj | 6 +-- .../Greenshot.Addon.Lutim.csproj | 4 +- .../Greenshot.Addon.OCR.csproj | 4 +- .../Greenshot.Addon.OcrCommand.csproj | 2 +- .../Greenshot.Addon.Office.csproj | 4 +- .../Greenshot.Addon.OneDrive.csproj | 4 +- .../Greenshot.Addon.Photobucket.csproj | 4 +- .../Greenshot.Addon.Tfs.csproj | 4 +- .../Greenshot.Addon.Win10.csproj | 4 +- src/Greenshot.Addons/Core/GdiScreenCapture.cs | 4 +- src/Greenshot.Addons/Greenshot.Addons.csproj | 6 +-- src/Greenshot.Core/Greenshot.Core.csproj | 6 +-- .../Greenshot.Gfx.Experimental.csproj | 2 +- src/Greenshot.Gfx/Greenshot.Gfx.csproj | 2 +- .../CapturePerformance.cs | 45 +++++++++++++++++-- .../Greenshot.PerformanceTests.csproj | 3 +- src/Greenshot.Tests/Greenshot.Tests.csproj | 2 +- src/Greenshot/Greenshot.csproj | 8 ++-- 27 files changed, 97 insertions(+), 55 deletions(-) diff --git a/src/Greenshot.Addon.Box/Greenshot.Addon.Box.csproj b/src/Greenshot.Addon.Box/Greenshot.Addon.Box.csproj index 4bddc256c..67ee8e7cf 100644 --- a/src/Greenshot.Addon.Box/Greenshot.Addon.Box.csproj +++ b/src/Greenshot.Addon.Box/Greenshot.Addon.Box.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Box @@ -49,7 +49,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/src/Greenshot.Addon.Confluence/Greenshot.Addon.Confluence.csproj b/src/Greenshot.Addon.Confluence/Greenshot.Addon.Confluence.csproj index 0014857b1..6356e8a98 100644 --- a/src/Greenshot.Addon.Confluence/Greenshot.Addon.Confluence.csproj +++ b/src/Greenshot.Addon.Confluence/Greenshot.Addon.Confluence.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Confluence @@ -55,7 +55,7 @@ - + all diff --git a/src/Greenshot.Addon.Dropbox/Greenshot.Addon.Dropbox.csproj b/src/Greenshot.Addon.Dropbox/Greenshot.Addon.Dropbox.csproj index e6d0115af..10aee5bdb 100644 --- a/src/Greenshot.Addon.Dropbox/Greenshot.Addon.Dropbox.csproj +++ b/src/Greenshot.Addon.Dropbox/Greenshot.Addon.Dropbox.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Dropbox @@ -51,7 +51,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/src/Greenshot.Addon.ExternalCommand/Greenshot.Addon.ExternalCommand.csproj b/src/Greenshot.Addon.ExternalCommand/Greenshot.Addon.ExternalCommand.csproj index 095f1684a..819b8cbb8 100644 --- a/src/Greenshot.Addon.ExternalCommand/Greenshot.Addon.ExternalCommand.csproj +++ b/src/Greenshot.Addon.ExternalCommand/Greenshot.Addon.ExternalCommand.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.ExternalCommand @@ -40,7 +40,7 @@ - + all diff --git a/src/Greenshot.Addon.Flickr/Greenshot.Addon.Flickr.csproj b/src/Greenshot.Addon.Flickr/Greenshot.Addon.Flickr.csproj index 8b70bf3b3..204be6a80 100644 --- a/src/Greenshot.Addon.Flickr/Greenshot.Addon.Flickr.csproj +++ b/src/Greenshot.Addon.Flickr/Greenshot.Addon.Flickr.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Flickr @@ -49,7 +49,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/src/Greenshot.Addon.GooglePhotos/Greenshot.Addon.GooglePhotos.csproj b/src/Greenshot.Addon.GooglePhotos/Greenshot.Addon.GooglePhotos.csproj index 2c6f3889c..adf86d903 100644 --- a/src/Greenshot.Addon.GooglePhotos/Greenshot.Addon.GooglePhotos.csproj +++ b/src/Greenshot.Addon.GooglePhotos/Greenshot.Addon.GooglePhotos.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.GooglePhotos @@ -49,7 +49,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/src/Greenshot.Addon.Imgur/Greenshot.Addon.Imgur.csproj b/src/Greenshot.Addon.Imgur/Greenshot.Addon.Imgur.csproj index 99e2165fe..d92975ad0 100644 --- a/src/Greenshot.Addon.Imgur/Greenshot.Addon.Imgur.csproj +++ b/src/Greenshot.Addon.Imgur/Greenshot.Addon.Imgur.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Imgur @@ -50,7 +50,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/src/Greenshot.Addon.InternetExplorer/Greenshot.Addon.InternetExplorer.csproj b/src/Greenshot.Addon.InternetExplorer/Greenshot.Addon.InternetExplorer.csproj index 7943b4979..1f41c244d 100644 --- a/src/Greenshot.Addon.InternetExplorer/Greenshot.Addon.InternetExplorer.csproj +++ b/src/Greenshot.Addon.InternetExplorer/Greenshot.Addon.InternetExplorer.csproj @@ -1,4 +1,4 @@ - + net471;netcoreapp3.0 @@ -30,10 +30,10 @@ - 0.8.7 + 0.8.9 - 0.8.7 + 0.8.9 diff --git a/src/Greenshot.Addon.Jira/Greenshot.Addon.Jira.csproj b/src/Greenshot.Addon.Jira/Greenshot.Addon.Jira.csproj index 119aa28b0..8016e8d02 100644 --- a/src/Greenshot.Addon.Jira/Greenshot.Addon.Jira.csproj +++ b/src/Greenshot.Addon.Jira/Greenshot.Addon.Jira.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Jira @@ -53,7 +53,7 @@ - + all diff --git a/src/Greenshot.Addon.LegacyEditor/Greenshot.Addon.LegacyEditor.csproj b/src/Greenshot.Addon.LegacyEditor/Greenshot.Addon.LegacyEditor.csproj index 7a0547694..f4b25702e 100644 --- a/src/Greenshot.Addon.LegacyEditor/Greenshot.Addon.LegacyEditor.csproj +++ b/src/Greenshot.Addon.LegacyEditor/Greenshot.Addon.LegacyEditor.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.LegacyEditor @@ -136,8 +136,8 @@ - - + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Greenshot.Addon.Lutim/Greenshot.Addon.Lutim.csproj b/src/Greenshot.Addon.Lutim/Greenshot.Addon.Lutim.csproj index a74942f59..3cccfd739 100644 --- a/src/Greenshot.Addon.Lutim/Greenshot.Addon.Lutim.csproj +++ b/src/Greenshot.Addon.Lutim/Greenshot.Addon.Lutim.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Lutim @@ -50,7 +50,7 @@ - + all diff --git a/src/Greenshot.Addon.OCR/Greenshot.Addon.OCR.csproj b/src/Greenshot.Addon.OCR/Greenshot.Addon.OCR.csproj index 8a0fd92a6..b60f46dd2 100644 --- a/src/Greenshot.Addon.OCR/Greenshot.Addon.OCR.csproj +++ b/src/Greenshot.Addon.OCR/Greenshot.Addon.OCR.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.OCR @@ -40,7 +40,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/src/Greenshot.Addon.OcrCommand/Greenshot.Addon.OcrCommand.csproj b/src/Greenshot.Addon.OcrCommand/Greenshot.Addon.OcrCommand.csproj index 0635b9938..aa44937c0 100644 --- a/src/Greenshot.Addon.OcrCommand/Greenshot.Addon.OcrCommand.csproj +++ b/src/Greenshot.Addon.OcrCommand/Greenshot.Addon.OcrCommand.csproj @@ -1,4 +1,4 @@ - + WinExe diff --git a/src/Greenshot.Addon.Office/Greenshot.Addon.Office.csproj b/src/Greenshot.Addon.Office/Greenshot.Addon.Office.csproj index 7bf2e1108..03f14a122 100644 --- a/src/Greenshot.Addon.Office/Greenshot.Addon.Office.csproj +++ b/src/Greenshot.Addon.Office/Greenshot.Addon.Office.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Office @@ -40,7 +40,7 @@ - + diff --git a/src/Greenshot.Addon.OneDrive/Greenshot.Addon.OneDrive.csproj b/src/Greenshot.Addon.OneDrive/Greenshot.Addon.OneDrive.csproj index 03cbdb5d9..1a3a385fe 100644 --- a/src/Greenshot.Addon.OneDrive/Greenshot.Addon.OneDrive.csproj +++ b/src/Greenshot.Addon.OneDrive/Greenshot.Addon.OneDrive.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.OneDrive @@ -50,7 +50,7 @@ - + all diff --git a/src/Greenshot.Addon.Photobucket/Greenshot.Addon.Photobucket.csproj b/src/Greenshot.Addon.Photobucket/Greenshot.Addon.Photobucket.csproj index a2e89ab53..02cb01ece 100644 --- a/src/Greenshot.Addon.Photobucket/Greenshot.Addon.Photobucket.csproj +++ b/src/Greenshot.Addon.Photobucket/Greenshot.Addon.Photobucket.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Photobucket @@ -49,7 +49,7 @@ - + all runtime; build; native; contentfiles; analyzers diff --git a/src/Greenshot.Addon.Tfs/Greenshot.Addon.Tfs.csproj b/src/Greenshot.Addon.Tfs/Greenshot.Addon.Tfs.csproj index aa4a1eae7..e8de26405 100644 --- a/src/Greenshot.Addon.Tfs/Greenshot.Addon.Tfs.csproj +++ b/src/Greenshot.Addon.Tfs/Greenshot.Addon.Tfs.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Tfs @@ -50,7 +50,7 @@ - + all diff --git a/src/Greenshot.Addon.Win10/Greenshot.Addon.Win10.csproj b/src/Greenshot.Addon.Win10/Greenshot.Addon.Win10.csproj index 603db5808..06e110786 100644 --- a/src/Greenshot.Addon.Win10/Greenshot.Addon.Win10.csproj +++ b/src/Greenshot.Addon.Win10/Greenshot.Addon.Win10.csproj @@ -1,4 +1,4 @@ - + Greenshot.Addon.Win10 @@ -61,6 +61,6 @@ - + \ No newline at end of file diff --git a/src/Greenshot.Addons/Core/GdiScreenCapture.cs b/src/Greenshot.Addons/Core/GdiScreenCapture.cs index 46aaa03ed..58a8106c3 100644 --- a/src/Greenshot.Addons/Core/GdiScreenCapture.cs +++ b/src/Greenshot.Addons/Core/GdiScreenCapture.cs @@ -25,6 +25,7 @@ using System; using System.Drawing; +using System.Runtime.InteropServices; using System.Windows; using System.Windows.Interop; using System.Windows.Media.Imaging; @@ -50,6 +51,7 @@ namespace Greenshot.Addons.Core private readonly SafeCompatibleDcHandle _safeCompatibleDcHandle; private readonly SafeDibSectionHandle _safeDibSectionHandle; private readonly SafeSelectObjectHandle _safeSelectObjectHandle; + private IntPtr _bits; /// /// Return the source rectangle @@ -90,7 +92,7 @@ namespace Greenshot.Addons.Core // Create BitmapInfoHeader, which is later used in the CreateDIBSection var bitmapInfoHeader = BitmapInfoHeader.Create(DestinationSize.Width, DestinationSize.Height, 32); // Create a DibSection, a device-independent bitmap (DIB) - _safeDibSectionHandle = Gdi32Api.CreateDIBSection(_desktopDcHandle, ref bitmapInfoHeader, DibColors.RgbColors, out _, IntPtr.Zero, 0); + _safeDibSectionHandle = Gdi32Api.CreateDIBSection(_desktopDcHandle, ref bitmapInfoHeader, DibColors.RgbColors, out _bits, IntPtr.Zero, 0); // select the device-independent bitmap in the device context, storing the previous. // This is needed, so every interaction with the DC will go into the DIB. diff --git a/src/Greenshot.Addons/Greenshot.Addons.csproj b/src/Greenshot.Addons/Greenshot.Addons.csproj index b8f7aa5c2..98c8a696f 100644 --- a/src/Greenshot.Addons/Greenshot.Addons.csproj +++ b/src/Greenshot.Addons/Greenshot.Addons.csproj @@ -1,4 +1,4 @@ - + net471;netcoreapp3.0 @@ -62,10 +62,10 @@ 0.9.18 - 0.8.7 + 0.8.9 - 0.8.7 + 0.8.9 all diff --git a/src/Greenshot.Core/Greenshot.Core.csproj b/src/Greenshot.Core/Greenshot.Core.csproj index a3e2a37ec..5dcb12478 100644 --- a/src/Greenshot.Core/Greenshot.Core.csproj +++ b/src/Greenshot.Core/Greenshot.Core.csproj @@ -1,7 +1,7 @@ - + - net471;netcoreapp3.0 + net471 true @@ -29,7 +29,7 @@ - 0.8.7 + 0.8.9 diff --git a/src/Greenshot.Gfx.Experimental/Greenshot.Gfx.Experimental.csproj b/src/Greenshot.Gfx.Experimental/Greenshot.Gfx.Experimental.csproj index 065c6f372..75af664e7 100644 --- a/src/Greenshot.Gfx.Experimental/Greenshot.Gfx.Experimental.csproj +++ b/src/Greenshot.Gfx.Experimental/Greenshot.Gfx.Experimental.csproj @@ -1,4 +1,4 @@ - + net471;netcoreapp3.0 diff --git a/src/Greenshot.Gfx/Greenshot.Gfx.csproj b/src/Greenshot.Gfx/Greenshot.Gfx.csproj index 61f859ded..40dad8b9b 100644 --- a/src/Greenshot.Gfx/Greenshot.Gfx.csproj +++ b/src/Greenshot.Gfx/Greenshot.Gfx.csproj @@ -1,4 +1,4 @@ - + net471;netcoreapp3.0 diff --git a/src/Greenshot.PerformanceTests/CapturePerformance.cs b/src/Greenshot.PerformanceTests/CapturePerformance.cs index 82e8c6a3b..433d600cb 100644 --- a/src/Greenshot.PerformanceTests/CapturePerformance.cs +++ b/src/Greenshot.PerformanceTests/CapturePerformance.cs @@ -22,10 +22,14 @@ #endregion using System; +using System.IO; using BenchmarkDotNet.Attributes; +using Dapplo.Log; using Dapplo.Windows.Common.Structs; using Dapplo.Windows.User32; using Greenshot.Addons.Core; +using SharpAvi; +using SharpAvi.Output; namespace Greenshot.PerformanceTests { @@ -35,10 +39,33 @@ namespace Greenshot.PerformanceTests [MinColumn, MaxColumn, MemoryDiagnoser] public class CapturePerformance { + private static readonly LogSource Log = new LogSource(); // A ScreenCapture which captures the whole screen (multi-monitor) - private readonly GdiScreenCapture _screenCapture = new GdiScreenCapture(DisplayInfo.ScreenBounds); + private GdiScreenCapture _screenCapture; // A ScreenCapture which captures the whole screen (multi-monitor) but with half the destination size, uses stretch-blt - private readonly GdiScreenCapture _screenCaptureResized = new GdiScreenCapture(DisplayInfo.ScreenBounds, new NativeSize(DisplayInfo.ScreenBounds.Width / 2, DisplayInfo.ScreenBounds.Height / 2)); + private GdiScreenCapture _screenCaptureResized; + private AviWriter _aviWriter; + private IAviVideoStream _aviVideoStream; + + [GlobalSetup] + public void Setup() + { + _screenCapture = new GdiScreenCapture(DisplayInfo.ScreenBounds); + var resizedSize = new NativeSize(DisplayInfo.ScreenBounds.Width / 2, DisplayInfo.ScreenBounds.Height / 2); + _screenCaptureResized = new GdiScreenCapture(DisplayInfo.ScreenBounds, resizedSize); + + var aviFile = Path.Combine(Path.GetTempPath(), @"test.avi"); + Log.Info().WriteLine("Writing AVI to {0}", aviFile); + _aviWriter = new AviWriter(aviFile) + { + FramesPerSecond = 30, + // Emitting AVI v1 index in addition to OpenDML index (AVI v2) + // improves compatibility with some software, including + // standard Windows programs like Media Player and File Explorer + EmitIndex1 = true + }; + _aviVideoStream = _aviWriter.AddVideoStream(resizedSize.Width, resizedSize.Height, BitsPerPixel.Bpp24); + } /// /// This benchmarks a screen capture which does a lot of additional work @@ -71,16 +98,28 @@ namespace Greenshot.PerformanceTests /// /// Capture the screen with buffered settings, but resized (smaller) destination /// - [Benchmark] + //[Benchmark] public void CaptureBufferedResized() { _screenCaptureResized.CaptureFrame(); } + /// + /// Capture the screen with buffered settings, but resized (smaller) destination + /// + //[Benchmark] + public void CaptureAvi() + { + _screenCaptureResized.CaptureFrame(); + // TODO: Write frame... + //_aviVideoStream.WriteFrame(false, new []{}, 0, 0); + } + [GlobalCleanup] public void Cleanup() { _screenCapture.Dispose(); + _aviWriter.Close(); } } } diff --git a/src/Greenshot.PerformanceTests/Greenshot.PerformanceTests.csproj b/src/Greenshot.PerformanceTests/Greenshot.PerformanceTests.csproj index ade01d3ca..a18afd4ab 100644 --- a/src/Greenshot.PerformanceTests/Greenshot.PerformanceTests.csproj +++ b/src/Greenshot.PerformanceTests/Greenshot.PerformanceTests.csproj @@ -1,4 +1,4 @@ - + Greenshot.PerformanceTests @@ -66,6 +66,7 @@ + diff --git a/src/Greenshot.Tests/Greenshot.Tests.csproj b/src/Greenshot.Tests/Greenshot.Tests.csproj index 248d35bb4..75795a164 100644 --- a/src/Greenshot.Tests/Greenshot.Tests.csproj +++ b/src/Greenshot.Tests/Greenshot.Tests.csproj @@ -1,4 +1,4 @@ - + net471;netcoreapp3.0 diff --git a/src/Greenshot/Greenshot.csproj b/src/Greenshot/Greenshot.csproj index a03be5562..c64c5dc23 100644 --- a/src/Greenshot/Greenshot.csproj +++ b/src/Greenshot/Greenshot.csproj @@ -1,4 +1,4 @@ - + WinExe @@ -88,9 +88,9 @@ - - - + + + all runtime; build; native; contentfiles; analyzers