aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2019-06-22 04:31:03 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2019-06-22 04:48:06 +0300
commit7c4015695a733f9649f0f3d98c9a79b94b7393da (patch)
tree67fc67c08b7d51eaece8275aabb5a3f3ec480c82
parentd20e6b38692f4d1159fa4219c0985f8b322454e4 (diff)
downloadlibADLMIDI-7c4015695a733f9649f0f3d98c9a79b94b7393da.tar.gz
libADLMIDI-7c4015695a733f9649f0f3d98c9a79b94b7393da.tar.bz2
libADLMIDI-7c4015695a733f9649f0f3d98c9a79b94b7393da.zip
Make new cache format for new database entries
-rw-r--r--utils/gen_adldata/measurer.cpp20
-rw-r--r--utils/gen_adldata/measurer.h4
2 files changed, 21 insertions, 3 deletions
diff --git a/utils/gen_adldata/measurer.cpp b/utils/gen_adldata/measurer.cpp
index 3270463..8785254 100644
--- a/utils/gen_adldata/measurer.cpp
+++ b/utils/gen_adldata/measurer.cpp
@@ -1044,10 +1044,24 @@ void MeasureThreaded::destData::callback(void *myself)
if(s->bd)
{
+ OperatorsKey ok = {s->bd_ins->ops[0], s->bd_ins->ops[1], s->bd_ins->ops[2], s->bd_ins->ops[3],
+ static_cast<int_fast32_t>(s->bd_ins->fbConn),
+ s->bd_ins->noteOffset1, s->bd_ins->noteOffset2,
+ static_cast<int_fast32_t>(s->bd_ins->percussionKeyNumber),
+ static_cast<int_fast32_t>(s->bd_ins->instFlags)};
+ DurationInfoCacheX::iterator cachedEntry = s->myself->m_durationInfoX.find(ok);
+ if(cachedEntry != s->myself->m_durationInfoX.end())
+ {
+ const DurationInfo &di = cachedEntry->second;
+ s->bd_ins->delay_on_ms = di.ms_sound_kon;
+ s->bd_ins->delay_off_ms = di.ms_sound_koff;
+ s->myself->m_cache_matches++;
+ goto endWork;
+ }
info = MeasureDurations(*s->bd, *s->bd_ins, &dosbox);
- // s->myself->m_durationInfo_mx.lock();
- // s->myself->m_durationInfo.insert({s->i->first, info});
- // s->myself->m_durationInfo_mx.unlock();
+ s->myself->m_durationInfo_mx.lock();
+ s->myself->m_durationInfoX.insert({ok, info});
+ s->myself->m_durationInfo_mx.unlock();
}
else
{
diff --git a/utils/gen_adldata/measurer.h b/utils/gen_adldata/measurer.h
index d02b2e4..ddc66bc 100644
--- a/utils/gen_adldata/measurer.h
+++ b/utils/gen_adldata/measurer.h
@@ -6,6 +6,7 @@
#include <mutex>
#include <condition_variable>
#include <thread>
+#include <array>
#include "progs_cache.h"
@@ -54,7 +55,9 @@ private:
struct MeasureThreaded
{
+ typedef std::array<int_fast32_t, 9> OperatorsKey;
typedef std::map<ins, DurationInfo> DurationInfoCache;
+ typedef std::map<OperatorsKey, DurationInfo> DurationInfoCacheX;
MeasureThreaded() :
m_semaphore(int(std::thread::hardware_concurrency()) * 2),
@@ -65,6 +68,7 @@ struct MeasureThreaded
Semaphore m_semaphore;
std::mutex m_durationInfo_mx;
DurationInfoCache m_durationInfo;
+ DurationInfoCacheX m_durationInfoX;
std::atomic_bool m_delete_tail;
size_t m_total = 0;
std::atomic<size_t> m_done;