From d1c72d8d73f3b3e09fabf0a34dbc104cf0e58148 Mon Sep 17 00:00:00 2001 From: dirk Date: Sat, 18 Jan 2014 10:31:19 +0000 Subject: [PATCH] Added ResourceLimits class. --- Magick++/Makefile.am | 1 + Magick++/lib/Functions.cpp | 10 ---- Magick++/lib/Magick++.h | 1 + Magick++/lib/Magick++/Functions.h | 5 -- Magick++/lib/Magick++/Include.h | 5 ++ Magick++/lib/Magick++/ResourceLimits.h | 51 ++++++++++++++++++++ Magick++/lib/ResourceLimits.cpp | 65 ++++++++++++++++++++++++++ 7 files changed, 123 insertions(+), 15 deletions(-) create mode 100644 Magick++/lib/Magick++/ResourceLimits.h create mode 100644 Magick++/lib/ResourceLimits.cpp diff --git a/Magick++/Makefile.am b/Magick++/Makefile.am index 25e9c4114..645cc82a6 100644 --- a/Magick++/Makefile.am +++ b/Magick++/Makefile.am @@ -126,6 +126,7 @@ MAGICKPP_INCHEADERS_OPT = \ Magick++/lib/Magick++/Include.h \ Magick++/lib/Magick++/Montage.h \ Magick++/lib/Magick++/Pixels.h \ + Magick++/lib/Magick++/ResourceLimits.h \ Magick++/lib/Magick++/STL.h \ Magick++/lib/Magick++/TypeMetric.h diff --git a/Magick++/lib/Functions.cpp b/Magick++/lib/Functions.cpp index 671995eca..a9397ce4d 100644 --- a/Magick++/lib/Functions.cpp +++ b/Magick++/lib/Functions.cpp @@ -32,16 +32,6 @@ void Magick::CloneString(char **destination_, const std::string &source_) MagickCore::CloneString(destination_,source_.c_str()); } -MagickPPExport void Magick::CacheThreshold(const MagickSizeType threshold_) -{ - (void) SetMagickResourceLimit(MemoryResource,threshold_); -} - -MagickPPExport MagickCore::MagickSizeType Magick::CacheThreshold(void) -{ - return GetMagickResourceLimit(MemoryResource); -} - MagickPPExport void Magick::DisableOpenCL(void) { GetPPException; diff --git a/Magick++/lib/Magick++.h b/Magick++/lib/Magick++.h index 740d51ef5..7df92cfc3 100644 --- a/Magick++/lib/Magick++.h +++ b/Magick++/lib/Magick++.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #define MagickPlusPlus_Header #endif // MagickPlusPlus_Header diff --git a/Magick++/lib/Magick++/Functions.h b/Magick++/lib/Magick++/Functions.h index 938a58882..ec6ff4fe5 100644 --- a/Magick++/lib/Magick++/Functions.h +++ b/Magick++/lib/Magick++/Functions.h @@ -14,11 +14,6 @@ namespace Magick { - // Pixel cache threshold in bytes. Once this memory threshold is exceeded, - // all subsequent pixels cache operations are to/from disk - MagickPPExport void CacheThreshold(const MagickSizeType threshold_); - MagickPPExport MagickSizeType CacheThreshold(void); - // Clone C++ string as allocated C string, de-allocating any existing string MagickPPExport void CloneString(char **destination_, const std::string &source_); diff --git a/Magick++/lib/Magick++/Include.h b/Magick++/lib/Magick++/Include.h index d0b08735e..35ece4edb 100644 --- a/Magick++/lib/Magick++/Include.h +++ b/Magick++/lib/Magick++/Include.h @@ -843,7 +843,12 @@ namespace Magick using MagickCore::RelativeIntent; // Resource types + using MagickCore::ResourceType; + using MagickCore::AreaResource; + using MagickCore::DiskResource; + using MagickCore::MapResource; using MagickCore::MemoryResource; + using MagickCore::ThreadResource; // Resolution units using MagickCore::ResolutionType; diff --git a/Magick++/lib/Magick++/ResourceLimits.h b/Magick++/lib/Magick++/ResourceLimits.h new file mode 100644 index 000000000..6f0c13767 --- /dev/null +++ b/Magick++/lib/Magick++/ResourceLimits.h @@ -0,0 +1,51 @@ +// This may look like C code, but it is really -*- C++ -*- +// +// Copyright Dirk Lemstra, 2014 +// +// Definition of resource limits. +// + +#if !defined(Magick_ResourceLimits_header) +#define Magick_ResourceLimits_header + +#include "Magick++/Include.h" + +namespace Magick +{ + class MagickPPExport ResourceLimits + { + public: + + // Pixel cache limit in bytes. Requests for memory above this limit + // are automagically allocated on disk. + static void area(const MagickSizeType limit_); + static MagickSizeType area(void); + + // Pixel cache limit in bytes. Requests for memory above this limit + // will fail. + static void disk(const MagickSizeType limit_); + static MagickSizeType disk(void); + + // Pixel cache limit in bytes. Once this memory limit is exceeded, + // all subsequent pixels cache operations are to/from disk. + static void map(const MagickSizeType limit_); + static MagickSizeType map(void); + + // Pixel cache limit in bytes. Once this memory limit is exceeded, + // all subsequent pixels cache operations are to/from disk or to/from + // memory mapped files. + static void memory(const MagickSizeType limit_); + static MagickSizeType memory(void); + + // Limits the number of threads used in multithreaded operations. + static void thread(const MagickSizeType limit_); + static MagickSizeType thread(void); + + private: + ResourceLimits(void); + + }; // class ResourceLimits + +} // Magick namespace + +#endif // Magick_ResourceLimits_header diff --git a/Magick++/lib/ResourceLimits.cpp b/Magick++/lib/ResourceLimits.cpp new file mode 100644 index 000000000..9c78116dc --- /dev/null +++ b/Magick++/lib/ResourceLimits.cpp @@ -0,0 +1,65 @@ +// This may look like C code, but it is really -*- C++ -*- +// +// Copyright Dirk Lemstra, 2014 +// +// Implementation of ResourceLimits +// + +#define MAGICKCORE_IMPLEMENTATION 1 +#define MAGICK_PLUSPLUS_IMPLEMENTATION 1 + +#include "Magick++/ResourceLimits.h" + +void Magick::ResourceLimits::area(const MagickSizeType limit_) +{ + (void) SetMagickResourceLimit(AreaResource,limit_); +} + +MagickCore::MagickSizeType Magick::ResourceLimits::area(void) +{ + return GetMagickResourceLimit(AreaResource); +} + +void Magick::ResourceLimits::disk(const MagickSizeType limit_) +{ + (void) SetMagickResourceLimit(DiskResource,limit_); +} + +MagickCore::MagickSizeType Magick::ResourceLimits::disk(void) +{ + return GetMagickResourceLimit(DiskResource); +} + +void Magick::ResourceLimits::map(const MagickSizeType limit_) +{ + (void) SetMagickResourceLimit(MapResource,limit_); +} + +MagickCore::MagickSizeType Magick::ResourceLimits::map(void) +{ + return GetMagickResourceLimit(MapResource); +} + +void Magick::ResourceLimits::memory(const MagickSizeType limit_) +{ + (void) SetMagickResourceLimit(MemoryResource,limit_); +} + +MagickCore::MagickSizeType Magick::ResourceLimits::memory(void) +{ + return GetMagickResourceLimit(MemoryResource); +} + +void Magick::ResourceLimits::thread(const MagickSizeType limit_) +{ + (void) SetMagickResourceLimit(ThreadResource,limit_); +} + +MagickCore::MagickSizeType Magick::ResourceLimits::thread(void) +{ + return GetMagickResourceLimit(ThreadResource); +} + +Magick::ResourceLimits::ResourceLimits() +{ +} -- 2.40.0