Performance Improvements and Some Polish (#1702)
* Auto scale reading timeline * Added benchmarks for SharpImage and NetVips. When an epub has a malformed page, catch the error and present it better to the user. * Added a hint for an upcoming feature * Slightly sped up word count for epubs * Added one more test to reflect actual code. * Some light cleanup * Use compact number for stat lists * Fixed brightness being broken on manga reader * Replaced CoverToWebP SharpImage version with NetVips which is MUCH lighter on memory and CPU. * Added last modified on the progress dto for CdDisplayEx. * Code cleanup * Forgot one cleanup
This commit is contained in:
parent
d1596c4ab7
commit
b62d340bb3
15 changed files with 192 additions and 123 deletions
|
@ -1,9 +1,14 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.IO.Abstractions;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using API.Services;
|
||||
using BenchmarkDotNet.Attributes;
|
||||
using BenchmarkDotNet.Order;
|
||||
using SixLabors.ImageSharp;
|
||||
using SixLabors.ImageSharp.Formats.Png;
|
||||
using SixLabors.ImageSharp.Formats.Webp;
|
||||
using SixLabors.ImageSharp.Processing;
|
||||
|
||||
namespace API.Benchmark;
|
||||
|
||||
|
@ -17,6 +22,10 @@ public class ArchiveServiceBenchmark
|
|||
private readonly ArchiveService _archiveService;
|
||||
private readonly IDirectoryService _directoryService;
|
||||
private readonly IImageService _imageService;
|
||||
private readonly PngEncoder _pngEncoder = new PngEncoder();
|
||||
private readonly WebpEncoder _webPEncoder = new WebpEncoder();
|
||||
private const string SourceImage = "C:/Users/josep/Pictures/obey_by_grrsa-d6llkaa_colored_by_me.png";
|
||||
|
||||
|
||||
public ArchiveServiceBenchmark()
|
||||
{
|
||||
|
@ -49,6 +58,52 @@ public class ArchiveServiceBenchmark
|
|||
}
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public void ImageSharp_ExtractImage_PNG()
|
||||
{
|
||||
var outputDirectory = "C:/Users/josep/Pictures/imagesharp/";
|
||||
_directoryService.ExistOrCreate(outputDirectory);
|
||||
|
||||
using var stream = new FileStream(SourceImage, FileMode.Open);
|
||||
using var thumbnail2 = SixLabors.ImageSharp.Image.Load(stream);
|
||||
thumbnail2.Mutate(x => x.Resize(320, 0));
|
||||
thumbnail2.Save(_directoryService.FileSystem.Path.Join(outputDirectory, "imagesharp.png"), _pngEncoder);
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public void ImageSharp_ExtractImage_WebP()
|
||||
{
|
||||
var outputDirectory = "C:/Users/josep/Pictures/imagesharp/";
|
||||
_directoryService.ExistOrCreate(outputDirectory);
|
||||
|
||||
using var stream = new FileStream(SourceImage, FileMode.Open);
|
||||
using var thumbnail2 = SixLabors.ImageSharp.Image.Load(stream);
|
||||
thumbnail2.Mutate(x => x.Resize(320, 0));
|
||||
thumbnail2.Save(_directoryService.FileSystem.Path.Join(outputDirectory, "imagesharp.webp"), _webPEncoder);
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public void NetVips_ExtractImage_PNG()
|
||||
{
|
||||
var outputDirectory = "C:/Users/josep/Pictures/netvips/";
|
||||
_directoryService.ExistOrCreate(outputDirectory);
|
||||
|
||||
using var stream = new FileStream(SourceImage, FileMode.Open);
|
||||
using var thumbnail = NetVips.Image.ThumbnailStream(stream, 320);
|
||||
thumbnail.WriteToFile(_directoryService.FileSystem.Path.Join(outputDirectory, "netvips.png"));
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public void NetVips_ExtractImage_WebP()
|
||||
{
|
||||
var outputDirectory = "C:/Users/josep/Pictures/netvips/";
|
||||
_directoryService.ExistOrCreate(outputDirectory);
|
||||
|
||||
using var stream = new FileStream(SourceImage, FileMode.Open);
|
||||
using var thumbnail = NetVips.Image.ThumbnailStream(stream, 320);
|
||||
thumbnail.WriteToFile(_directoryService.FileSystem.Path.Join(outputDirectory, "netvips.webp"));
|
||||
}
|
||||
|
||||
// Benchmark to test default GetNumberOfPages from archive
|
||||
// vs a new method where I try to open the archive and return said stream
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue