mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-27 07:23:09 +02:00
eitd: Reduce sectionsd memory requirements:
* Various EPG related strings (language- and country keys, audio descriptions) come with a pretty low variance. Cache them, and use an index instead of allocating redundant strings for each and every SIevent. * Storing content classifications in native format instead of std::string removes quite some memory overhead, too. This saves about 250 bytes of RAM for every event cached, resulting in a considerably reduced sectionsd memory footprint. Conflicts: src/eitd/xmlutil.cpp
This commit is contained in:
@@ -344,8 +344,7 @@ xprintf("addEvent: ch %012" PRIx64 " running %d (%s) got_CN %d\n", evt.get_chann
|
||||
already_exists = false;
|
||||
|
||||
if ((already_exists) && (SIlanguage::getMode() == CSectionsdClient::LANGUAGE_MODE_OFF)) {
|
||||
si->second->contentClassification = evt.contentClassification;
|
||||
si->second->userClassification = evt.userClassification;
|
||||
si->second->classifications = evt.classifications;
|
||||
#ifdef USE_ITEM_DESCRIPTION
|
||||
si->second->itemDescription = evt.itemDescription;
|
||||
si->second->item = evt.item;
|
||||
@@ -353,11 +352,11 @@ xprintf("addEvent: ch %012" PRIx64 " running %d (%s) got_CN %d\n", evt.get_chann
|
||||
//si->second->vps = evt.vps;
|
||||
if ((evt.getExtendedText().length() > 0) && !evt.times.empty() &&
|
||||
(evt.times.begin()->startzeit < zeit + secondsExtendedTextCache))
|
||||
si->second->setExtendedText("OFF",evt.getExtendedText().c_str());
|
||||
si->second->setExtendedText(0 /*"OFF"*/,evt.getExtendedText());
|
||||
if (evt.getText().length() > 0)
|
||||
si->second->setText("OFF",evt.getText().c_str());
|
||||
si->second->setText(0 /*"OFF"*/,evt.getText());
|
||||
if (evt.getName().length() > 0)
|
||||
si->second->setName("OFF",evt.getName().c_str());
|
||||
si->second->setName(0 /*"OFF"*/,evt.getName());
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -375,7 +374,7 @@ xprintf("addEvent: ch %012" PRIx64 " running %d (%s) got_CN %d\n", evt.get_chann
|
||||
//Strip ExtendedDescription if too far in the future
|
||||
if ((e->times.begin()->startzeit > zeit + secondsExtendedTextCache) &&
|
||||
(SIlanguage::getMode() == CSectionsdClient::LANGUAGE_MODE_OFF) && (zeit != 0))
|
||||
e->setExtendedText("OFF","");
|
||||
e->setExtendedText(0 /*"OFF"*/,"");
|
||||
|
||||
/*
|
||||
* this is test code, so indentation is deliberately wrong :-)
|
||||
@@ -2601,8 +2600,7 @@ bool CEitManager::getEPGid(const event_id_t epgID, const time_t startzeit, CEPGD
|
||||
epgdata->info1 = evt.getText();
|
||||
epgdata->info2 = evt.getExtendedText();
|
||||
/* FIXME printf("itemDescription: %s\n", evt.itemDescription.c_str()); */
|
||||
epgdata->contentClassification = std::string(evt.contentClassification.data(), evt.contentClassification.length());
|
||||
epgdata->userClassification = std::string(evt.userClassification.data(), evt.userClassification.length());
|
||||
evt.classifications.get(epgdata->contentClassification, epgdata->userClassification);
|
||||
epgdata->fsk = evt.getFSK();
|
||||
epgdata->table_id = evt.table_id;
|
||||
|
||||
@@ -2663,8 +2661,7 @@ bool CEitManager::getActualEPGServiceKey(const t_channel_id channel_id, CEPGData
|
||||
epgdata->info1 = evt.getText();
|
||||
epgdata->info2 = evt.getExtendedText();
|
||||
/* FIXME printf("itemDescription: %s\n", evt.itemDescription.c_str());*/
|
||||
epgdata->contentClassification = std::string(evt.contentClassification.data(), evt.contentClassification.length());
|
||||
epgdata->userClassification = std::string(evt.userClassification.data(), evt.userClassification.length());
|
||||
evt.classifications.get(epgdata->contentClassification, epgdata->userClassification);
|
||||
epgdata->fsk = evt.getFSK();
|
||||
epgdata->table_id = evt.table_id;
|
||||
|
||||
@@ -2765,7 +2762,7 @@ bool CEitManager::getComponentTagsUniqueKey(const event_id_t uniqueKey, CSection
|
||||
ret = true;
|
||||
|
||||
for (SIcomponents::iterator cmp = eFirst->second->components.begin(); cmp != eFirst->second->components.end(); ++cmp) {
|
||||
response.component = cmp->component;
|
||||
response.component = cmp->getComponentName();
|
||||
response.componentType = cmp->componentType;
|
||||
response.componentTag = cmp->componentTag;
|
||||
response.streamContent = cmp->streamContent;
|
||||
|
Reference in New Issue
Block a user