summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llcommon/llassettype.cpp93
-rw-r--r--indra/llcommon/llassettype.h5
-rw-r--r--indra/newview/app_settings/settings.xml12
-rw-r--r--indra/newview/llstartup.cpp10
-rw-r--r--indra/newview/llviewercontrol.cpp8
5 files changed, 127 insertions, 1 deletions
diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp
index 4304db36be..6ecc2ec740 100644
--- a/indra/llcommon/llassettype.cpp
+++ b/indra/llcommon/llassettype.cpp
@@ -31,6 +31,9 @@
#include "llmemory.h"
#include "llsingleton.h"
+#include <set>
+#include <boost/algorithm/string.hpp>
+
///----------------------------------------------------------------------------
/// Class LLAssetType
///----------------------------------------------------------------------------
@@ -48,7 +51,8 @@ struct AssetEntry : public LLDictionaryEntry
mHumanName(human_name),
mCanLink(can_link),
mCanFetch(can_fetch),
- mCanKnow(can_know)
+ mCanKnow(can_know),
+ mFetchWithVACap(false)
{
llassert(strlen(mTypeName) <= 8);
}
@@ -58,6 +62,7 @@ struct AssetEntry : public LLDictionaryEntry
bool mCanLink;
bool mCanFetch;
bool mCanKnow;
+ bool mFetchWithVACap;
};
class LLAssetDictionary : public LLSingleton<LLAssetDictionary>,
@@ -251,3 +256,89 @@ bool LLAssetType::lookupIsAssetIDKnowable(EType asset_type)
}
return false;
}
+
+// static
+bool LLAssetType::lookupFetchWithVACap(EType asset_type)
+{
+ LLAssetDictionary *dict = LLAssetDictionary::getInstance();
+ const AssetEntry *entry = dict->lookup(asset_type);
+ if (entry)
+ {
+ return entry->mFetchWithVACap;
+ }
+ return false;
+}
+
+// FIXME asset-http yank all this after asset-http becomes universal
+void LLAssetType::setFetchWithVACapTypeString(const std::string& type_string)
+{
+ LLAssetDictionary *dict = LLAssetDictionary::getInstance();
+ if (type_string=="none")
+ {
+ for (LLAssetDictionary::iterator iter = dict->begin();
+ iter != dict->end();
+ iter++)
+ {
+ AssetEntry *entry = iter->second;
+ entry->mFetchWithVACap = false;
+ }
+ }
+ else if (type_string=="all")
+ {
+ for (LLAssetDictionary::iterator iter = dict->begin();
+ iter != dict->end();
+ iter++)
+ {
+ AssetEntry *entry = iter->second;
+ entry->mFetchWithVACap = true;
+ }
+ }
+ else
+ {
+ for (LLAssetDictionary::iterator iter = dict->begin();
+ iter != dict->end();
+ iter++)
+ {
+ AssetEntry *entry = iter->second;
+ if (entry->mTypeName==type_string)
+ {
+ entry->mFetchWithVACap = true;
+ }
+ }
+ }
+}
+
+// FIXME asset-http yank all this after asset-http becomes universal
+void LLAssetType::setFetchWithVACapConfigString(const std::string& config_string)
+{
+ // Clear any currently enabled types
+ LLAssetType::setFetchWithVACapTypeString("none");
+
+ // Enable all types specified in the config string.
+ std::set<std::string> type_names_for_va_cap;
+ boost::split(type_names_for_va_cap, config_string, boost::is_any_of(" :,"));
+ for (std::set<std::string>::const_iterator it = type_names_for_va_cap.begin();
+ it != type_names_for_va_cap.end(); ++it)
+ {
+ const std::string& type_string = *it;
+ LLAssetType::setFetchWithVACapTypeString(type_string);
+ }
+
+ LLAssetDictionary *dict = LLAssetDictionary::getInstance();
+ bool any_found = false;
+ for (LLAssetDictionary::iterator iter = dict->begin();
+ iter != dict->end();
+ iter++)
+ {
+ AssetEntry *entry = iter->second;
+ if (entry->mFetchWithVACap)
+ {
+ any_found = true;
+ LL_WARNS() << "Fetch with ViewerAsset cap enabled for " << entry->mTypeName << LL_ENDL;
+ }
+ }
+ if (!any_found)
+ {
+ LL_WARNS() << "Fetch with ViewerAsset cap disabled for all types" << LL_ENDL;
+ }
+}
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
index 3a4b5dad18..e06ebc2a35 100644
--- a/indra/llcommon/llassettype.h
+++ b/indra/llcommon/llassettype.h
@@ -152,6 +152,11 @@ public:
static bool lookupIsAssetFetchByIDAllowed(EType asset_type); // the asset allows direct download
static bool lookupIsAssetIDKnowable(EType asset_type); // asset data can be known by the viewer
+
+ static bool lookupFetchWithVACap(EType asset_type); // asset data is fetched via http using ViewerAsset cap.
+
+ static void setFetchWithVACapTypeString(const std::string& type_string);
+ static void setFetchWithVACapConfigString(const std::string& config_string);
static const std::string& badLookup(); // error string when a lookup fails
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 9f37c3487e..8b899dc8c8 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -15808,6 +15808,18 @@
<integer>0</integer>
</map>
+ <key>ViewerAssetHttpTypes</key>
+ <map>
+ <key>Comment</key>
+ <string>Use the ViewerAsset cap and HTTP pipeline for fetching assets of the listed type names. "none" and "all" are recognized as a special values.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string />
+ </map>
+
<key>SimulateFBOFailure</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 1bb3d65e05..38fdaea9d8 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -311,6 +311,16 @@ void set_flags_and_update_appearance()
// true when all initialization done.
bool idle_startup()
{
+ // FIXME asset-http - this configuration stuff is temporary
+ // construction; once it is always on for certain types
+ // and we can remove the setting.
+ static bool va_types_initialized = false;
+ if (!va_types_initialized)
+ {
+ va_types_initialized = true;
+ LLAssetType::setFetchWithVACapConfigString(gSavedSettings.getString("ViewerAssetHttpTypes"));
+ }
+
const F32 PRECACHING_DELAY = gSavedSettings.getF32("PrecachingDelay");
static LLTimer timeout;
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index db71849659..5b51888547 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -127,6 +127,13 @@ static bool handleDebugAvatarJointsChanged(const LLSD& newvalue)
return true;
}
+static bool handleViewerAssetHttpTypesChanged(const LLSD& newvalue)
+{
+ std::string new_string = newvalue.asString();
+ LLAssetType::setFetchWithVACapConfigString(new_string);
+ return true;
+}
+
static bool handleSetShaderChanged(const LLSD& newvalue)
{
// changing shader level may invalidate existing cached bump maps, as the shader type determines the format of the bump map it expects - clear and repopulate the bump cache
@@ -750,6 +757,7 @@ void settings_setup_listeners()
gSavedSettings.getControl("SpellCheckDictionary")->getSignal()->connect(boost::bind(&handleSpellCheckChanged));
gSavedSettings.getControl("LoginLocation")->getSignal()->connect(boost::bind(&handleLoginLocationChanged));
gSavedSettings.getControl("DebugAvatarJoints")->getCommitSignal()->connect(boost::bind(&handleDebugAvatarJointsChanged, _2));
+ gSavedSettings.getControl("ViewerAssetHttpTypes")->getCommitSignal()->connect(boost::bind(&handleViewerAssetHttpTypesChanged, _2));
}
#if TEST_CACHED_CONTROL