commit
59eb2815bf
|
|
@ -1,111 +1,111 @@
|
|||
#!/usr/bin/python
|
||||
"""\
|
||||
@file run_build_test.py
|
||||
@author Nat Goodspeed
|
||||
@date 2009-09-03
|
||||
@brief Helper script to allow CMake to run some command after setting
|
||||
environment variables.
|
||||
|
||||
CMake has commands to run an external program. But remember that each CMake
|
||||
command must be backed by multiple build-system implementations. Unfortunately
|
||||
it seems CMake can't promise that every target build system can set specified
|
||||
environment variables before running the external program of interest.
|
||||
|
||||
This helper script is a workaround. It simply sets the requested environment
|
||||
variables and then executes the program specified on the rest of its command
|
||||
line.
|
||||
|
||||
Example:
|
||||
|
||||
python run_build_test.py -DFOO=bar myprog somearg otherarg
|
||||
|
||||
sets environment variable FOO=bar, then runs:
|
||||
myprog somearg otherarg
|
||||
|
||||
$LicenseInfo:firstyear=2009&license=internal$
|
||||
Copyright (c) 2009, Linden Research, Inc.
|
||||
$/LicenseInfo$
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
def main(command, libpath=[], vars={}):
|
||||
"""Pass:
|
||||
command is a sequence (e.g. a list) of strings. The first item in the list
|
||||
must be the command name, the rest are its arguments.
|
||||
|
||||
libpath is a sequence of directory pathnames. These will be appended to
|
||||
the platform-specific dynamic library search path environment variable.
|
||||
|
||||
vars is a dict of arbitrary (var, value) pairs to be added to the
|
||||
environment before running 'command'.
|
||||
|
||||
This function runs the specified command, waits for it to terminate and
|
||||
returns its return code. This will be negative if the command terminated
|
||||
with a signal, else it will be the process's specified exit code.
|
||||
"""
|
||||
# Handle platform-dependent libpath first.
|
||||
if sys.platform == "win32":
|
||||
lpvars = ["PATH"]
|
||||
elif sys.platform == "darwin":
|
||||
lpvars = ["LD_LIBRARY_PATH", "DYLD_LIBRARY_PATH"]
|
||||
elif sys.platform.startswith("linux"):
|
||||
lpvars = ["LD_LIBRARY_PATH"]
|
||||
else:
|
||||
# No idea what the right pathname might be! But only crump if this
|
||||
# feature is requested.
|
||||
if libpath:
|
||||
raise NotImplemented("run_build_test: unknown platform %s" % sys.platform)
|
||||
lpvars = []
|
||||
for var in lpvars:
|
||||
# Split the existing path. Bear in mind that the variable in question
|
||||
# might not exist; instead of KeyError, just use an empty string.
|
||||
dirs = os.environ.get(var, "").split(os.pathsep)
|
||||
# Append the sequence in libpath
|
||||
## print "%s += %r" % (var, libpath)
|
||||
dirs.extend(libpath)
|
||||
# Now rebuild the path string. This way we use a minimum of separators
|
||||
# -- and we avoid adding a pointless separator when libpath is empty.
|
||||
os.environ[var] = os.pathsep.join(dirs)
|
||||
# Now handle arbitrary environment variables. The tricky part is ensuring
|
||||
# that all the keys and values we try to pass are actually strings.
|
||||
## if vars:
|
||||
## print "Setting:"
|
||||
## for key, value in vars.iteritems():
|
||||
## print "%s=%s" % (key, value)
|
||||
os.environ.update(dict([(str(key), str(value)) for key, value in vars.iteritems()]))
|
||||
# Run the child process.
|
||||
## print "Running: %s" % " ".join(command)
|
||||
return subprocess.call(command)
|
||||
|
||||
if __name__ == "__main__":
|
||||
from optparse import OptionParser
|
||||
parser = OptionParser(usage="usage: %prog [options] command args...")
|
||||
# We want optparse support for the options we ourselves handle -- but we
|
||||
# DO NOT want it looking at options for the executable we intend to run,
|
||||
# rejecting them as invalid because we don't define them. So configure the
|
||||
# parser to stop looking for options as soon as it sees the first
|
||||
# positional argument (traditional Unix syntax).
|
||||
parser.disable_interspersed_args()
|
||||
parser.add_option("-D", "--define", dest="vars", default=[], action="append",
|
||||
metavar="VAR=value",
|
||||
help="Add VAR=value to the env variables defined")
|
||||
parser.add_option("-l", "--libpath", dest="libpath", default=[], action="append",
|
||||
metavar="DIR",
|
||||
help="Add DIR to the platform-dependent DLL search path")
|
||||
opts, args = parser.parse_args()
|
||||
# What we have in opts.vars is a list of strings of the form "VAR=value"
|
||||
# or possibly just "VAR". What we want is a dict. We can build that dict by
|
||||
# constructing a list of ["VAR", "value"] pairs -- so split each
|
||||
# "VAR=value" string on the '=' sign (but only once, in case we have
|
||||
# "VAR=some=user=string"). To handle the case of just "VAR", append "" to
|
||||
# the list returned by split(), then slice off anything after the pair we
|
||||
# want.
|
||||
rc = main(command=args, libpath=opts.libpath,
|
||||
vars=dict([(pair.split('=', 1) + [""])[:2] for pair in opts.vars]))
|
||||
if rc not in (None, 0):
|
||||
print >>sys.stderr, "Failure running: %s" % " ".join(args)
|
||||
print >>sys.stderr, "Error: %s" % rc
|
||||
sys.exit((rc < 0) and 255 or rc)
|
||||
#!/usr/bin/python
|
||||
"""\
|
||||
@file run_build_test.py
|
||||
@author Nat Goodspeed
|
||||
@date 2009-09-03
|
||||
@brief Helper script to allow CMake to run some command after setting
|
||||
environment variables.
|
||||
|
||||
CMake has commands to run an external program. But remember that each CMake
|
||||
command must be backed by multiple build-system implementations. Unfortunately
|
||||
it seems CMake can't promise that every target build system can set specified
|
||||
environment variables before running the external program of interest.
|
||||
|
||||
This helper script is a workaround. It simply sets the requested environment
|
||||
variables and then executes the program specified on the rest of its command
|
||||
line.
|
||||
|
||||
Example:
|
||||
|
||||
python run_build_test.py -DFOO=bar myprog somearg otherarg
|
||||
|
||||
sets environment variable FOO=bar, then runs:
|
||||
myprog somearg otherarg
|
||||
|
||||
$LicenseInfo:firstyear=2009&license=internal$
|
||||
Copyright (c) 2009, Linden Research, Inc.
|
||||
$/LicenseInfo$
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
def main(command, libpath=[], vars={}):
|
||||
"""Pass:
|
||||
command is a sequence (e.g. a list) of strings. The first item in the list
|
||||
must be the command name, the rest are its arguments.
|
||||
|
||||
libpath is a sequence of directory pathnames. These will be appended to
|
||||
the platform-specific dynamic library search path environment variable.
|
||||
|
||||
vars is a dict of arbitrary (var, value) pairs to be added to the
|
||||
environment before running 'command'.
|
||||
|
||||
This function runs the specified command, waits for it to terminate and
|
||||
returns its return code. This will be negative if the command terminated
|
||||
with a signal, else it will be the process's specified exit code.
|
||||
"""
|
||||
# Handle platform-dependent libpath first.
|
||||
if sys.platform == "win32":
|
||||
lpvars = ["PATH"]
|
||||
elif sys.platform == "darwin":
|
||||
lpvars = ["LD_LIBRARY_PATH", "DYLD_LIBRARY_PATH"]
|
||||
elif sys.platform.startswith("linux"):
|
||||
lpvars = ["LD_LIBRARY_PATH"]
|
||||
else:
|
||||
# No idea what the right pathname might be! But only crump if this
|
||||
# feature is requested.
|
||||
if libpath:
|
||||
raise NotImplemented("run_build_test: unknown platform %s" % sys.platform)
|
||||
lpvars = []
|
||||
for var in lpvars:
|
||||
# Split the existing path. Bear in mind that the variable in question
|
||||
# might not exist; instead of KeyError, just use an empty string.
|
||||
dirs = os.environ.get(var, "").split(os.pathsep)
|
||||
# Append the sequence in libpath
|
||||
## print "%s += %r" % (var, libpath)
|
||||
dirs.extend(libpath)
|
||||
# Now rebuild the path string. This way we use a minimum of separators
|
||||
# -- and we avoid adding a pointless separator when libpath is empty.
|
||||
os.environ[var] = os.pathsep.join(dirs)
|
||||
# Now handle arbitrary environment variables. The tricky part is ensuring
|
||||
# that all the keys and values we try to pass are actually strings.
|
||||
## if vars:
|
||||
## print "Setting:"
|
||||
## for key, value in vars.iteritems():
|
||||
## print "%s=%s" % (key, value)
|
||||
os.environ.update(dict([(str(key), str(value)) for key, value in vars.iteritems()]))
|
||||
# Run the child process.
|
||||
## print "Running: %s" % " ".join(command)
|
||||
return subprocess.call(command)
|
||||
|
||||
if __name__ == "__main__":
|
||||
from optparse import OptionParser
|
||||
parser = OptionParser(usage="usage: %prog [options] command args...")
|
||||
# We want optparse support for the options we ourselves handle -- but we
|
||||
# DO NOT want it looking at options for the executable we intend to run,
|
||||
# rejecting them as invalid because we don't define them. So configure the
|
||||
# parser to stop looking for options as soon as it sees the first
|
||||
# positional argument (traditional Unix syntax).
|
||||
parser.disable_interspersed_args()
|
||||
parser.add_option("-D", "--define", dest="vars", default=[], action="append",
|
||||
metavar="VAR=value",
|
||||
help="Add VAR=value to the env variables defined")
|
||||
parser.add_option("-l", "--libpath", dest="libpath", default=[], action="append",
|
||||
metavar="DIR",
|
||||
help="Add DIR to the platform-dependent DLL search path")
|
||||
opts, args = parser.parse_args()
|
||||
# What we have in opts.vars is a list of strings of the form "VAR=value"
|
||||
# or possibly just "VAR". What we want is a dict. We can build that dict by
|
||||
# constructing a list of ["VAR", "value"] pairs -- so split each
|
||||
# "VAR=value" string on the '=' sign (but only once, in case we have
|
||||
# "VAR=some=user=string"). To handle the case of just "VAR", append "" to
|
||||
# the list returned by split(), then slice off anything after the pair we
|
||||
# want.
|
||||
rc = main(command=args, libpath=opts.libpath,
|
||||
vars=dict([(pair.split('=', 1) + [""])[:2] for pair in opts.vars]))
|
||||
if rc not in (None, 0):
|
||||
print >>sys.stderr, "Failure running: %s" % " ".join(args)
|
||||
print >>sys.stderr, "Error: %s" % rc
|
||||
sys.exit((rc < 0) and 255 or rc)
|
||||
|
|
|
|||
|
|
@ -1,63 +1,63 @@
|
|||
/**
|
||||
* @file llallocator.h
|
||||
* @brief Declaration of the LLAllocator class.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2009-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLALLOCATOR_H
|
||||
#define LL_LLALLOCATOR_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "llmemtype.h"
|
||||
#include "llallocator_heap_profile.h"
|
||||
|
||||
class LL_COMMON_API LLAllocator {
|
||||
friend class LLMemoryView;
|
||||
friend class LLMemType;
|
||||
|
||||
private:
|
||||
static void pushMemType(S32 type);
|
||||
static S32 popMemType();
|
||||
|
||||
public:
|
||||
void setProfilingEnabled(bool should_enable);
|
||||
|
||||
static bool isProfiling();
|
||||
|
||||
LLAllocatorHeapProfile const & getProfile();
|
||||
|
||||
private:
|
||||
std::string getRawProfile();
|
||||
|
||||
private:
|
||||
LLAllocatorHeapProfile mProf;
|
||||
};
|
||||
|
||||
#endif // LL_LLALLOCATOR_H
|
||||
/**
|
||||
* @file llallocator.h
|
||||
* @brief Declaration of the LLAllocator class.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2009-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLALLOCATOR_H
|
||||
#define LL_LLALLOCATOR_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "llmemtype.h"
|
||||
#include "llallocator_heap_profile.h"
|
||||
|
||||
class LL_COMMON_API LLAllocator {
|
||||
friend class LLMemoryView;
|
||||
friend class LLMemType;
|
||||
|
||||
private:
|
||||
static void pushMemType(S32 type);
|
||||
static S32 popMemType();
|
||||
|
||||
public:
|
||||
void setProfilingEnabled(bool should_enable);
|
||||
|
||||
static bool isProfiling();
|
||||
|
||||
LLAllocatorHeapProfile const & getProfile();
|
||||
|
||||
private:
|
||||
std::string getRawProfile();
|
||||
|
||||
private:
|
||||
LLAllocatorHeapProfile mProf;
|
||||
};
|
||||
|
||||
#endif // LL_LLALLOCATOR_H
|
||||
|
|
|
|||
|
|
@ -1,149 +1,149 @@
|
|||
/**
|
||||
* @file llcoros.h
|
||||
* @author Nat Goodspeed
|
||||
* @date 2009-06-02
|
||||
* @brief Manage running boost::coroutine instances
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&license=viewergpl$
|
||||
* Copyright (c) 2009, Linden Research, Inc.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if ! defined(LL_LLCOROS_H)
|
||||
#define LL_LLCOROS_H
|
||||
|
||||
#include <boost/coroutine/coroutine.hpp>
|
||||
#include "llsingleton.h"
|
||||
#include <boost/ptr_container/ptr_map.hpp>
|
||||
#include <string>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/iteration/local.hpp>
|
||||
#include <stdexcept>
|
||||
|
||||
/**
|
||||
* Registry of named Boost.Coroutine instances
|
||||
*
|
||||
* The Boost.Coroutine library supports the general case of a coroutine
|
||||
* accepting arbitrary parameters and yielding multiple (sets of) results. For
|
||||
* such use cases, it's natural for the invoking code to retain the coroutine
|
||||
* instance: the consumer repeatedly calls into the coroutine, perhaps passing
|
||||
* new parameter values, prompting it to yield its next result.
|
||||
*
|
||||
* Our typical coroutine usage is different, though. For us, coroutines
|
||||
* provide an alternative to the @c Responder pattern. Our typical coroutine
|
||||
* has @c void return, invoked in fire-and-forget mode: the handler for some
|
||||
* user gesture launches the coroutine and promptly returns to the main loop.
|
||||
* The coroutine initiates some action that will take multiple frames (e.g. a
|
||||
* capability request), waits for its result, processes it and silently steals
|
||||
* away.
|
||||
*
|
||||
* This usage poses two (related) problems:
|
||||
*
|
||||
* # Who should own the coroutine instance? If it's simply local to the
|
||||
* handler code that launches it, return from the handler will destroy the
|
||||
* coroutine object, terminating the coroutine.
|
||||
* # Once the coroutine terminates, in whatever way, who's responsible for
|
||||
* cleaning up the coroutine object?
|
||||
*
|
||||
* LLCoros is a Singleton collection of currently-active coroutine instances.
|
||||
* Each has a name. You ask LLCoros to launch a new coroutine with a suggested
|
||||
* name prefix; from your prefix it generates a distinct name, registers the
|
||||
* new coroutine and returns the actual name.
|
||||
*
|
||||
* The name can be used to kill off the coroutine prematurely, if needed. It
|
||||
* can also provide diagnostic info: we can look up the name of the
|
||||
* currently-running coroutine.
|
||||
*
|
||||
* Finally, the next frame ("mainloop" event) after the coroutine terminates,
|
||||
* LLCoros will notice its demise and destroy it.
|
||||
*/
|
||||
class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
|
||||
{
|
||||
public:
|
||||
/// Canonical boost::coroutines::coroutine signature we use
|
||||
typedef boost::coroutines::coroutine<void()> coro;
|
||||
/// Canonical 'self' type
|
||||
typedef coro::self self;
|
||||
|
||||
/**
|
||||
* Create and start running a new coroutine with specified name. The name
|
||||
* string you pass is a suggestion; it will be tweaked for uniqueness. The
|
||||
* actual name is returned to you.
|
||||
*
|
||||
* Usage looks like this, for (e.g.) two coroutine parameters:
|
||||
* @code
|
||||
* class MyClass
|
||||
* {
|
||||
* public:
|
||||
* ...
|
||||
* // Do NOT NOT NOT accept reference params other than 'self'!
|
||||
* // Pass by value only!
|
||||
* void myCoroutineMethod(LLCoros::self& self, std::string, LLSD);
|
||||
* ...
|
||||
* };
|
||||
* ...
|
||||
* std::string name = LLCoros::instance().launch(
|
||||
* "mycoro", boost::bind(&MyClass::myCoroutineMethod, this, _1,
|
||||
* "somestring", LLSD(17));
|
||||
* @endcode
|
||||
*
|
||||
* Your function/method must accept LLCoros::self& as its first parameter.
|
||||
* It can accept any other parameters you want -- but ONLY BY VALUE!
|
||||
* Other reference parameters are a BAD IDEA! You Have Been Warned. See
|
||||
* DEV-32777 comments for an explanation.
|
||||
*
|
||||
* Pass a callable that accepts the single LLCoros::self& parameter. It
|
||||
* may work to pass a free function whose only parameter is 'self'; for
|
||||
* all other cases use boost::bind(). Of course, for a non-static class
|
||||
* method, the first parameter must be the class instance. Use the
|
||||
* placeholder _1 for the 'self' parameter. Any other parameters should be
|
||||
* passed via the bind() expression.
|
||||
*
|
||||
* launch() tweaks the suggested name so it won't collide with any
|
||||
* existing coroutine instance, creates the coroutine instance, registers
|
||||
* it with the tweaked name and runs it until its first wait. At that
|
||||
* point it returns the tweaked name.
|
||||
*/
|
||||
template <typename CALLABLE>
|
||||
std::string launch(const std::string& prefix, const CALLABLE& callable)
|
||||
{
|
||||
return launchImpl(prefix, new coro(callable));
|
||||
}
|
||||
|
||||
/**
|
||||
* Abort a running coroutine by name. Normally, when a coroutine either
|
||||
* runs to completion or terminates with an exception, LLCoros quietly
|
||||
* cleans it up. This is for use only when you must explicitly interrupt
|
||||
* one prematurely. Returns @c true if the specified name was found and
|
||||
* still running at the time.
|
||||
*/
|
||||
bool kill(const std::string& name);
|
||||
|
||||
/**
|
||||
* From within a coroutine, pass its @c self object to look up the
|
||||
* (tweaked) name string by which this coroutine is registered. Returns
|
||||
* the empty string if not found (e.g. if the coroutine was launched by
|
||||
* hand rather than using LLCoros::launch()).
|
||||
*/
|
||||
template <typename COROUTINE_SELF>
|
||||
std::string getName(const COROUTINE_SELF& self) const
|
||||
{
|
||||
return getNameByID(self.get_id());
|
||||
}
|
||||
|
||||
/// getName() by self.get_id()
|
||||
std::string getNameByID(const void* self_id) const;
|
||||
|
||||
private:
|
||||
friend class LLSingleton<LLCoros>;
|
||||
LLCoros();
|
||||
std::string launchImpl(const std::string& prefix, coro* newCoro);
|
||||
std::string generateDistinctName(const std::string& prefix) const;
|
||||
bool cleanup(const LLSD&);
|
||||
|
||||
typedef boost::ptr_map<std::string, coro> CoroMap;
|
||||
CoroMap mCoros;
|
||||
};
|
||||
|
||||
#endif /* ! defined(LL_LLCOROS_H) */
|
||||
/**
|
||||
* @file llcoros.h
|
||||
* @author Nat Goodspeed
|
||||
* @date 2009-06-02
|
||||
* @brief Manage running boost::coroutine instances
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&license=viewergpl$
|
||||
* Copyright (c) 2009, Linden Research, Inc.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#if ! defined(LL_LLCOROS_H)
|
||||
#define LL_LLCOROS_H
|
||||
|
||||
#include <boost/coroutine/coroutine.hpp>
|
||||
#include "llsingleton.h"
|
||||
#include <boost/ptr_container/ptr_map.hpp>
|
||||
#include <string>
|
||||
#include <boost/preprocessor/repetition/enum_params.hpp>
|
||||
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
||||
#include <boost/preprocessor/iteration/local.hpp>
|
||||
#include <stdexcept>
|
||||
|
||||
/**
|
||||
* Registry of named Boost.Coroutine instances
|
||||
*
|
||||
* The Boost.Coroutine library supports the general case of a coroutine
|
||||
* accepting arbitrary parameters and yielding multiple (sets of) results. For
|
||||
* such use cases, it's natural for the invoking code to retain the coroutine
|
||||
* instance: the consumer repeatedly calls into the coroutine, perhaps passing
|
||||
* new parameter values, prompting it to yield its next result.
|
||||
*
|
||||
* Our typical coroutine usage is different, though. For us, coroutines
|
||||
* provide an alternative to the @c Responder pattern. Our typical coroutine
|
||||
* has @c void return, invoked in fire-and-forget mode: the handler for some
|
||||
* user gesture launches the coroutine and promptly returns to the main loop.
|
||||
* The coroutine initiates some action that will take multiple frames (e.g. a
|
||||
* capability request), waits for its result, processes it and silently steals
|
||||
* away.
|
||||
*
|
||||
* This usage poses two (related) problems:
|
||||
*
|
||||
* # Who should own the coroutine instance? If it's simply local to the
|
||||
* handler code that launches it, return from the handler will destroy the
|
||||
* coroutine object, terminating the coroutine.
|
||||
* # Once the coroutine terminates, in whatever way, who's responsible for
|
||||
* cleaning up the coroutine object?
|
||||
*
|
||||
* LLCoros is a Singleton collection of currently-active coroutine instances.
|
||||
* Each has a name. You ask LLCoros to launch a new coroutine with a suggested
|
||||
* name prefix; from your prefix it generates a distinct name, registers the
|
||||
* new coroutine and returns the actual name.
|
||||
*
|
||||
* The name can be used to kill off the coroutine prematurely, if needed. It
|
||||
* can also provide diagnostic info: we can look up the name of the
|
||||
* currently-running coroutine.
|
||||
*
|
||||
* Finally, the next frame ("mainloop" event) after the coroutine terminates,
|
||||
* LLCoros will notice its demise and destroy it.
|
||||
*/
|
||||
class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
|
||||
{
|
||||
public:
|
||||
/// Canonical boost::coroutines::coroutine signature we use
|
||||
typedef boost::coroutines::coroutine<void()> coro;
|
||||
/// Canonical 'self' type
|
||||
typedef coro::self self;
|
||||
|
||||
/**
|
||||
* Create and start running a new coroutine with specified name. The name
|
||||
* string you pass is a suggestion; it will be tweaked for uniqueness. The
|
||||
* actual name is returned to you.
|
||||
*
|
||||
* Usage looks like this, for (e.g.) two coroutine parameters:
|
||||
* @code
|
||||
* class MyClass
|
||||
* {
|
||||
* public:
|
||||
* ...
|
||||
* // Do NOT NOT NOT accept reference params other than 'self'!
|
||||
* // Pass by value only!
|
||||
* void myCoroutineMethod(LLCoros::self& self, std::string, LLSD);
|
||||
* ...
|
||||
* };
|
||||
* ...
|
||||
* std::string name = LLCoros::instance().launch(
|
||||
* "mycoro", boost::bind(&MyClass::myCoroutineMethod, this, _1,
|
||||
* "somestring", LLSD(17));
|
||||
* @endcode
|
||||
*
|
||||
* Your function/method must accept LLCoros::self& as its first parameter.
|
||||
* It can accept any other parameters you want -- but ONLY BY VALUE!
|
||||
* Other reference parameters are a BAD IDEA! You Have Been Warned. See
|
||||
* DEV-32777 comments for an explanation.
|
||||
*
|
||||
* Pass a callable that accepts the single LLCoros::self& parameter. It
|
||||
* may work to pass a free function whose only parameter is 'self'; for
|
||||
* all other cases use boost::bind(). Of course, for a non-static class
|
||||
* method, the first parameter must be the class instance. Use the
|
||||
* placeholder _1 for the 'self' parameter. Any other parameters should be
|
||||
* passed via the bind() expression.
|
||||
*
|
||||
* launch() tweaks the suggested name so it won't collide with any
|
||||
* existing coroutine instance, creates the coroutine instance, registers
|
||||
* it with the tweaked name and runs it until its first wait. At that
|
||||
* point it returns the tweaked name.
|
||||
*/
|
||||
template <typename CALLABLE>
|
||||
std::string launch(const std::string& prefix, const CALLABLE& callable)
|
||||
{
|
||||
return launchImpl(prefix, new coro(callable));
|
||||
}
|
||||
|
||||
/**
|
||||
* Abort a running coroutine by name. Normally, when a coroutine either
|
||||
* runs to completion or terminates with an exception, LLCoros quietly
|
||||
* cleans it up. This is for use only when you must explicitly interrupt
|
||||
* one prematurely. Returns @c true if the specified name was found and
|
||||
* still running at the time.
|
||||
*/
|
||||
bool kill(const std::string& name);
|
||||
|
||||
/**
|
||||
* From within a coroutine, pass its @c self object to look up the
|
||||
* (tweaked) name string by which this coroutine is registered. Returns
|
||||
* the empty string if not found (e.g. if the coroutine was launched by
|
||||
* hand rather than using LLCoros::launch()).
|
||||
*/
|
||||
template <typename COROUTINE_SELF>
|
||||
std::string getName(const COROUTINE_SELF& self) const
|
||||
{
|
||||
return getNameByID(self.get_id());
|
||||
}
|
||||
|
||||
/// getName() by self.get_id()
|
||||
std::string getNameByID(const void* self_id) const;
|
||||
|
||||
private:
|
||||
friend class LLSingleton<LLCoros>;
|
||||
LLCoros();
|
||||
std::string launchImpl(const std::string& prefix, coro* newCoro);
|
||||
std::string generateDistinctName(const std::string& prefix) const;
|
||||
bool cleanup(const LLSD&);
|
||||
|
||||
typedef boost::ptr_map<std::string, coro> CoroMap;
|
||||
CoroMap mCoros;
|
||||
};
|
||||
|
||||
#endif /* ! defined(LL_LLCOROS_H) */
|
||||
|
|
|
|||
|
|
@ -1,317 +1,317 @@
|
|||
/**
|
||||
* @file llfasttimer.h
|
||||
* @brief Declaration of a fast timer.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2004&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2004-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_FASTTIMER_H
|
||||
#define LL_FASTTIMER_H
|
||||
|
||||
#include "llinstancetracker.h"
|
||||
|
||||
#define FAST_TIMER_ON 1
|
||||
|
||||
#if LL_WINDOWS
|
||||
|
||||
// shift off lower 8 bits for lower resolution but longer term timing
|
||||
// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing
|
||||
inline U32 get_cpu_clock_count_32()
|
||||
{
|
||||
U32 ret_val;
|
||||
__asm
|
||||
{
|
||||
_emit 0x0f
|
||||
_emit 0x31
|
||||
shr eax,8
|
||||
shl edx,24
|
||||
or eax, edx
|
||||
mov dword ptr [ret_val], eax
|
||||
}
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
// return full timer value, still shifted by 8 bits
|
||||
inline U64 get_cpu_clock_count_64()
|
||||
{
|
||||
U64 ret_val;
|
||||
__asm
|
||||
{
|
||||
_emit 0x0f
|
||||
_emit 0x31
|
||||
mov eax,eax
|
||||
mov edx,edx
|
||||
mov dword ptr [ret_val+4], edx
|
||||
mov dword ptr [ret_val], eax
|
||||
}
|
||||
return ret_val >> 8;
|
||||
}
|
||||
|
||||
#endif // LL_WINDOWS
|
||||
|
||||
#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
|
||||
inline U32 get_cpu_clock_count_32()
|
||||
{
|
||||
U64 x;
|
||||
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
|
||||
return (U32)x >> 8;
|
||||
}
|
||||
|
||||
inline U32 get_cpu_clock_count_64()
|
||||
{
|
||||
U64 x;
|
||||
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
|
||||
return x >> 8;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__))) || (LL_SOLARIS && defined(__sparc__))
|
||||
//
|
||||
// Mac PPC (deprecated) & Solaris SPARC implementation of CPU clock
|
||||
//
|
||||
// Just use gettimeofday implementation for now
|
||||
|
||||
inline U32 get_cpu_clock_count_32()
|
||||
{
|
||||
return (U32)get_clock_count();
|
||||
}
|
||||
|
||||
inline U32 get_cpu_clock_count_64()
|
||||
{
|
||||
return get_clock_count();
|
||||
}
|
||||
#endif
|
||||
|
||||
class LLMutex;
|
||||
|
||||
#include <queue>
|
||||
#include "llsd.h"
|
||||
|
||||
|
||||
class LL_COMMON_API LLFastTimer
|
||||
{
|
||||
public:
|
||||
// stores a "named" timer instance to be reused via multiple LLFastTimer stack instances
|
||||
class LL_COMMON_API NamedTimer
|
||||
: public LLInstanceTracker<NamedTimer>
|
||||
{
|
||||
friend class DeclareTimer;
|
||||
public:
|
||||
~NamedTimer();
|
||||
|
||||
enum { HISTORY_NUM = 60 };
|
||||
|
||||
const std::string& getName() const { return mName; }
|
||||
NamedTimer* getParent() const { return mParent; }
|
||||
void setParent(NamedTimer* parent);
|
||||
S32 getDepth();
|
||||
std::string getToolTip(S32 history_index = -1);
|
||||
|
||||
typedef std::vector<NamedTimer*>::const_iterator child_const_iter;
|
||||
child_const_iter beginChildren();
|
||||
child_const_iter endChildren();
|
||||
std::vector<NamedTimer*>& getChildren();
|
||||
|
||||
void setCollapsed(bool collapsed) { mCollapsed = collapsed; }
|
||||
bool getCollapsed() const { return mCollapsed; }
|
||||
|
||||
U32 getCountAverage() const { return mCountAverage; }
|
||||
U32 getCallAverage() const { return mCallAverage; }
|
||||
|
||||
U32 getHistoricalCount(S32 history_index = 0) const;
|
||||
U32 getHistoricalCalls(S32 history_index = 0) const;
|
||||
|
||||
static NamedTimer& getRootNamedTimer();
|
||||
|
||||
struct FrameState
|
||||
{
|
||||
FrameState(NamedTimer* timerp);
|
||||
|
||||
U32 mSelfTimeCounter;
|
||||
U32 mCalls;
|
||||
FrameState* mParent; // info for caller timer
|
||||
FrameState* mLastCaller; // used to bootstrap tree construction
|
||||
NamedTimer* mTimer;
|
||||
U16 mActiveCount; // number of timers with this ID active on stack
|
||||
bool mMoveUpTree; // needs to be moved up the tree of timers at the end of frame
|
||||
};
|
||||
|
||||
S32 getFrameStateIndex() const { return mFrameStateIndex; }
|
||||
|
||||
FrameState& getFrameState() const;
|
||||
|
||||
|
||||
private:
|
||||
friend class LLFastTimer;
|
||||
friend class NamedTimerFactory;
|
||||
|
||||
//
|
||||
// methods
|
||||
//
|
||||
NamedTimer(const std::string& name);
|
||||
// recursive call to gather total time from children
|
||||
static void accumulateTimings();
|
||||
|
||||
// updates cumulative times and hierarchy,
|
||||
// can be called multiple times in a frame, at any point
|
||||
static void processTimes();
|
||||
|
||||
static void buildHierarchy();
|
||||
static void resetFrame();
|
||||
static void reset();
|
||||
|
||||
|
||||
//
|
||||
// members
|
||||
//
|
||||
S32 mFrameStateIndex;
|
||||
|
||||
std::string mName;
|
||||
|
||||
U32 mTotalTimeCounter;
|
||||
|
||||
U32 mCountAverage;
|
||||
U32 mCallAverage;
|
||||
|
||||
U32* mCountHistory;
|
||||
U32* mCallHistory;
|
||||
|
||||
// tree structure
|
||||
NamedTimer* mParent; // NamedTimer of caller(parent)
|
||||
std::vector<NamedTimer*> mChildren;
|
||||
bool mCollapsed; // don't show children
|
||||
bool mNeedsSorting; // sort children whenever child added
|
||||
|
||||
};
|
||||
|
||||
// used to statically declare a new named timer
|
||||
class LL_COMMON_API DeclareTimer
|
||||
: public LLInstanceTracker<DeclareTimer>
|
||||
{
|
||||
public:
|
||||
DeclareTimer(const std::string& name, bool open);
|
||||
DeclareTimer(const std::string& name);
|
||||
|
||||
static void updateCachedPointers();
|
||||
|
||||
// convertable to NamedTimer::FrameState for convenient usage of LLFastTimer(declared_timer)
|
||||
operator NamedTimer::FrameState&() { return *mFrameState; }
|
||||
private:
|
||||
NamedTimer& mTimer;
|
||||
NamedTimer::FrameState* mFrameState;
|
||||
};
|
||||
|
||||
|
||||
public:
|
||||
static LLMutex* sLogLock;
|
||||
static std::queue<LLSD> sLogQueue;
|
||||
static BOOL sLog;
|
||||
static BOOL sMetricLog;
|
||||
|
||||
typedef std::vector<NamedTimer::FrameState> info_list_t;
|
||||
static info_list_t& getFrameStateList();
|
||||
|
||||
enum RootTimerMarker { ROOT };
|
||||
LLFastTimer(RootTimerMarker);
|
||||
|
||||
LLFastTimer(NamedTimer::FrameState& timer)
|
||||
: mFrameState(&timer)
|
||||
{
|
||||
#if FAST_TIMER_ON
|
||||
NamedTimer::FrameState* frame_state = &timer;
|
||||
U32 cur_time = get_cpu_clock_count_32();
|
||||
mStartSelfTime = cur_time;
|
||||
mStartTotalTime = cur_time;
|
||||
|
||||
frame_state->mActiveCount++;
|
||||
frame_state->mCalls++;
|
||||
// keep current parent as long as it is active when we are
|
||||
frame_state->mMoveUpTree |= (frame_state->mParent->mActiveCount == 0);
|
||||
|
||||
mLastTimer = sCurTimer;
|
||||
sCurTimer = this;
|
||||
#endif
|
||||
}
|
||||
|
||||
~LLFastTimer()
|
||||
{
|
||||
#if FAST_TIMER_ON
|
||||
NamedTimer::FrameState* frame_state = mFrameState;
|
||||
U32 cur_time = get_cpu_clock_count_32();
|
||||
frame_state->mSelfTimeCounter += cur_time - mStartSelfTime;
|
||||
|
||||
frame_state->mActiveCount--;
|
||||
LLFastTimer* last_timer = mLastTimer;
|
||||
sCurTimer = last_timer;
|
||||
|
||||
// store last caller to bootstrap tree creation
|
||||
frame_state->mLastCaller = last_timer->mFrameState;
|
||||
|
||||
// we are only tracking self time, so subtract our total time delta from parents
|
||||
U32 total_time = cur_time - mStartTotalTime;
|
||||
last_timer->mStartSelfTime += total_time;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// call this once a frame to reset timers
|
||||
static void nextFrame();
|
||||
|
||||
// dumps current cumulative frame stats to log
|
||||
// call nextFrame() to reset timers
|
||||
static void dumpCurTimes();
|
||||
|
||||
// call this to reset timer hierarchy, averages, etc.
|
||||
static void reset();
|
||||
|
||||
static U64 countsPerSecond();
|
||||
static S32 getLastFrameIndex() { return sLastFrameIndex; }
|
||||
static S32 getCurFrameIndex() { return sCurFrameIndex; }
|
||||
|
||||
static void writeLog(std::ostream& os);
|
||||
static const NamedTimer* getTimerByName(const std::string& name);
|
||||
|
||||
public:
|
||||
static bool sPauseHistory;
|
||||
static bool sResetHistory;
|
||||
|
||||
private:
|
||||
typedef std::vector<LLFastTimer*> timer_stack_t;
|
||||
static LLFastTimer* sCurTimer;
|
||||
static S32 sCurFrameIndex;
|
||||
static S32 sLastFrameIndex;
|
||||
static U64 sLastFrameTime;
|
||||
static info_list_t* sTimerInfos;
|
||||
|
||||
U32 mStartSelfTime; // start time + time of all child timers
|
||||
U32 mStartTotalTime; // start time + time of all child timers
|
||||
NamedTimer::FrameState* mFrameState;
|
||||
LLFastTimer* mLastTimer;
|
||||
};
|
||||
|
||||
#endif // LL_LLFASTTIMER_H
|
||||
/**
|
||||
* @file llfasttimer.h
|
||||
* @brief Declaration of a fast timer.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2004&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2004-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_FASTTIMER_H
|
||||
#define LL_FASTTIMER_H
|
||||
|
||||
#include "llinstancetracker.h"
|
||||
|
||||
#define FAST_TIMER_ON 1
|
||||
|
||||
#if LL_WINDOWS
|
||||
|
||||
// shift off lower 8 bits for lower resolution but longer term timing
|
||||
// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing
|
||||
inline U32 get_cpu_clock_count_32()
|
||||
{
|
||||
U32 ret_val;
|
||||
__asm
|
||||
{
|
||||
_emit 0x0f
|
||||
_emit 0x31
|
||||
shr eax,8
|
||||
shl edx,24
|
||||
or eax, edx
|
||||
mov dword ptr [ret_val], eax
|
||||
}
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
// return full timer value, still shifted by 8 bits
|
||||
inline U64 get_cpu_clock_count_64()
|
||||
{
|
||||
U64 ret_val;
|
||||
__asm
|
||||
{
|
||||
_emit 0x0f
|
||||
_emit 0x31
|
||||
mov eax,eax
|
||||
mov edx,edx
|
||||
mov dword ptr [ret_val+4], edx
|
||||
mov dword ptr [ret_val], eax
|
||||
}
|
||||
return ret_val >> 8;
|
||||
}
|
||||
|
||||
#endif // LL_WINDOWS
|
||||
|
||||
#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
|
||||
inline U32 get_cpu_clock_count_32()
|
||||
{
|
||||
U64 x;
|
||||
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
|
||||
return (U32)x >> 8;
|
||||
}
|
||||
|
||||
inline U32 get_cpu_clock_count_64()
|
||||
{
|
||||
U64 x;
|
||||
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
|
||||
return x >> 8;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__))) || (LL_SOLARIS && defined(__sparc__))
|
||||
//
|
||||
// Mac PPC (deprecated) & Solaris SPARC implementation of CPU clock
|
||||
//
|
||||
// Just use gettimeofday implementation for now
|
||||
|
||||
inline U32 get_cpu_clock_count_32()
|
||||
{
|
||||
return (U32)get_clock_count();
|
||||
}
|
||||
|
||||
inline U32 get_cpu_clock_count_64()
|
||||
{
|
||||
return get_clock_count();
|
||||
}
|
||||
#endif
|
||||
|
||||
class LLMutex;
|
||||
|
||||
#include <queue>
|
||||
#include "llsd.h"
|
||||
|
||||
|
||||
class LL_COMMON_API LLFastTimer
|
||||
{
|
||||
public:
|
||||
// stores a "named" timer instance to be reused via multiple LLFastTimer stack instances
|
||||
class LL_COMMON_API NamedTimer
|
||||
: public LLInstanceTracker<NamedTimer>
|
||||
{
|
||||
friend class DeclareTimer;
|
||||
public:
|
||||
~NamedTimer();
|
||||
|
||||
enum { HISTORY_NUM = 60 };
|
||||
|
||||
const std::string& getName() const { return mName; }
|
||||
NamedTimer* getParent() const { return mParent; }
|
||||
void setParent(NamedTimer* parent);
|
||||
S32 getDepth();
|
||||
std::string getToolTip(S32 history_index = -1);
|
||||
|
||||
typedef std::vector<NamedTimer*>::const_iterator child_const_iter;
|
||||
child_const_iter beginChildren();
|
||||
child_const_iter endChildren();
|
||||
std::vector<NamedTimer*>& getChildren();
|
||||
|
||||
void setCollapsed(bool collapsed) { mCollapsed = collapsed; }
|
||||
bool getCollapsed() const { return mCollapsed; }
|
||||
|
||||
U32 getCountAverage() const { return mCountAverage; }
|
||||
U32 getCallAverage() const { return mCallAverage; }
|
||||
|
||||
U32 getHistoricalCount(S32 history_index = 0) const;
|
||||
U32 getHistoricalCalls(S32 history_index = 0) const;
|
||||
|
||||
static NamedTimer& getRootNamedTimer();
|
||||
|
||||
struct FrameState
|
||||
{
|
||||
FrameState(NamedTimer* timerp);
|
||||
|
||||
U32 mSelfTimeCounter;
|
||||
U32 mCalls;
|
||||
FrameState* mParent; // info for caller timer
|
||||
FrameState* mLastCaller; // used to bootstrap tree construction
|
||||
NamedTimer* mTimer;
|
||||
U16 mActiveCount; // number of timers with this ID active on stack
|
||||
bool mMoveUpTree; // needs to be moved up the tree of timers at the end of frame
|
||||
};
|
||||
|
||||
S32 getFrameStateIndex() const { return mFrameStateIndex; }
|
||||
|
||||
FrameState& getFrameState() const;
|
||||
|
||||
|
||||
private:
|
||||
friend class LLFastTimer;
|
||||
friend class NamedTimerFactory;
|
||||
|
||||
//
|
||||
// methods
|
||||
//
|
||||
NamedTimer(const std::string& name);
|
||||
// recursive call to gather total time from children
|
||||
static void accumulateTimings();
|
||||
|
||||
// updates cumulative times and hierarchy,
|
||||
// can be called multiple times in a frame, at any point
|
||||
static void processTimes();
|
||||
|
||||
static void buildHierarchy();
|
||||
static void resetFrame();
|
||||
static void reset();
|
||||
|
||||
|
||||
//
|
||||
// members
|
||||
//
|
||||
S32 mFrameStateIndex;
|
||||
|
||||
std::string mName;
|
||||
|
||||
U32 mTotalTimeCounter;
|
||||
|
||||
U32 mCountAverage;
|
||||
U32 mCallAverage;
|
||||
|
||||
U32* mCountHistory;
|
||||
U32* mCallHistory;
|
||||
|
||||
// tree structure
|
||||
NamedTimer* mParent; // NamedTimer of caller(parent)
|
||||
std::vector<NamedTimer*> mChildren;
|
||||
bool mCollapsed; // don't show children
|
||||
bool mNeedsSorting; // sort children whenever child added
|
||||
|
||||
};
|
||||
|
||||
// used to statically declare a new named timer
|
||||
class LL_COMMON_API DeclareTimer
|
||||
: public LLInstanceTracker<DeclareTimer>
|
||||
{
|
||||
public:
|
||||
DeclareTimer(const std::string& name, bool open);
|
||||
DeclareTimer(const std::string& name);
|
||||
|
||||
static void updateCachedPointers();
|
||||
|
||||
// convertable to NamedTimer::FrameState for convenient usage of LLFastTimer(declared_timer)
|
||||
operator NamedTimer::FrameState&() { return *mFrameState; }
|
||||
private:
|
||||
NamedTimer& mTimer;
|
||||
NamedTimer::FrameState* mFrameState;
|
||||
};
|
||||
|
||||
|
||||
public:
|
||||
static LLMutex* sLogLock;
|
||||
static std::queue<LLSD> sLogQueue;
|
||||
static BOOL sLog;
|
||||
static BOOL sMetricLog;
|
||||
|
||||
typedef std::vector<NamedTimer::FrameState> info_list_t;
|
||||
static info_list_t& getFrameStateList();
|
||||
|
||||
enum RootTimerMarker { ROOT };
|
||||
LLFastTimer(RootTimerMarker);
|
||||
|
||||
LLFastTimer(NamedTimer::FrameState& timer)
|
||||
: mFrameState(&timer)
|
||||
{
|
||||
#if FAST_TIMER_ON
|
||||
NamedTimer::FrameState* frame_state = &timer;
|
||||
U32 cur_time = get_cpu_clock_count_32();
|
||||
mStartSelfTime = cur_time;
|
||||
mStartTotalTime = cur_time;
|
||||
|
||||
frame_state->mActiveCount++;
|
||||
frame_state->mCalls++;
|
||||
// keep current parent as long as it is active when we are
|
||||
frame_state->mMoveUpTree |= (frame_state->mParent->mActiveCount == 0);
|
||||
|
||||
mLastTimer = sCurTimer;
|
||||
sCurTimer = this;
|
||||
#endif
|
||||
}
|
||||
|
||||
~LLFastTimer()
|
||||
{
|
||||
#if FAST_TIMER_ON
|
||||
NamedTimer::FrameState* frame_state = mFrameState;
|
||||
U32 cur_time = get_cpu_clock_count_32();
|
||||
frame_state->mSelfTimeCounter += cur_time - mStartSelfTime;
|
||||
|
||||
frame_state->mActiveCount--;
|
||||
LLFastTimer* last_timer = mLastTimer;
|
||||
sCurTimer = last_timer;
|
||||
|
||||
// store last caller to bootstrap tree creation
|
||||
frame_state->mLastCaller = last_timer->mFrameState;
|
||||
|
||||
// we are only tracking self time, so subtract our total time delta from parents
|
||||
U32 total_time = cur_time - mStartTotalTime;
|
||||
last_timer->mStartSelfTime += total_time;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// call this once a frame to reset timers
|
||||
static void nextFrame();
|
||||
|
||||
// dumps current cumulative frame stats to log
|
||||
// call nextFrame() to reset timers
|
||||
static void dumpCurTimes();
|
||||
|
||||
// call this to reset timer hierarchy, averages, etc.
|
||||
static void reset();
|
||||
|
||||
static U64 countsPerSecond();
|
||||
static S32 getLastFrameIndex() { return sLastFrameIndex; }
|
||||
static S32 getCurFrameIndex() { return sCurFrameIndex; }
|
||||
|
||||
static void writeLog(std::ostream& os);
|
||||
static const NamedTimer* getTimerByName(const std::string& name);
|
||||
|
||||
public:
|
||||
static bool sPauseHistory;
|
||||
static bool sResetHistory;
|
||||
|
||||
private:
|
||||
typedef std::vector<LLFastTimer*> timer_stack_t;
|
||||
static LLFastTimer* sCurTimer;
|
||||
static S32 sCurFrameIndex;
|
||||
static S32 sLastFrameIndex;
|
||||
static U64 sLastFrameTime;
|
||||
static info_list_t* sTimerInfos;
|
||||
|
||||
U32 mStartSelfTime; // start time + time of all child timers
|
||||
U32 mStartTotalTime; // start time + time of all child timers
|
||||
NamedTimer::FrameState* mFrameState;
|
||||
LLFastTimer* mLastTimer;
|
||||
};
|
||||
|
||||
#endif // LL_LLFASTTIMER_H
|
||||
|
|
|
|||
|
|
@ -1,65 +1,65 @@
|
|||
/**
|
||||
* @file llmemory.h
|
||||
* @brief Memory allocation/deallocation header-stuff goes here.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
#ifndef LLMEMORY_H
|
||||
#define LLMEMORY_H
|
||||
|
||||
|
||||
|
||||
extern S32 gTotalDAlloc;
|
||||
extern S32 gTotalDAUse;
|
||||
extern S32 gDACount;
|
||||
|
||||
extern void* ll_allocate (size_t size);
|
||||
extern void ll_release (void *p);
|
||||
|
||||
class LL_COMMON_API LLMemory
|
||||
{
|
||||
public:
|
||||
static void initClass();
|
||||
static void cleanupClass();
|
||||
static void freeReserve();
|
||||
// Return the resident set size of the current process, in bytes.
|
||||
// Return value is zero if not known.
|
||||
static U64 getCurrentRSS();
|
||||
private:
|
||||
static char* reserveMem;
|
||||
};
|
||||
|
||||
// LLRefCount moved to llrefcount.h
|
||||
|
||||
// LLPointer moved to llpointer.h
|
||||
|
||||
// LLSafeHandle moved to llsafehandle.h
|
||||
|
||||
// LLSingleton moved to llsingleton.h
|
||||
|
||||
#endif
|
||||
/**
|
||||
* @file llmemory.h
|
||||
* @brief Memory allocation/deallocation header-stuff goes here.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
#ifndef LLMEMORY_H
|
||||
#define LLMEMORY_H
|
||||
|
||||
|
||||
|
||||
extern S32 gTotalDAlloc;
|
||||
extern S32 gTotalDAUse;
|
||||
extern S32 gDACount;
|
||||
|
||||
extern void* ll_allocate (size_t size);
|
||||
extern void ll_release (void *p);
|
||||
|
||||
class LL_COMMON_API LLMemory
|
||||
{
|
||||
public:
|
||||
static void initClass();
|
||||
static void cleanupClass();
|
||||
static void freeReserve();
|
||||
// Return the resident set size of the current process, in bytes.
|
||||
// Return value is zero if not known.
|
||||
static U64 getCurrentRSS();
|
||||
private:
|
||||
static char* reserveMem;
|
||||
};
|
||||
|
||||
// LLRefCount moved to llrefcount.h
|
||||
|
||||
// LLPointer moved to llpointer.h
|
||||
|
||||
// LLSafeHandle moved to llsafehandle.h
|
||||
|
||||
// LLSingleton moved to llsingleton.h
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,248 +1,248 @@
|
|||
/**
|
||||
* @file llmemtype.h
|
||||
* @brief Runtime memory usage debugging utilities.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2005&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2005-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_MEMTYPE_H
|
||||
#define LL_MEMTYPE_H
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#include "linden_common.h"
|
||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
// WARNING: Never commit with MEM_TRACK_MEM == 1
|
||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
#define MEM_TRACK_MEM (0 && LL_WINDOWS)
|
||||
|
||||
#include <vector>
|
||||
|
||||
#define MEM_TYPE_NEW(T)
|
||||
|
||||
class LL_COMMON_API LLMemType
|
||||
{
|
||||
public:
|
||||
|
||||
// class we'll initialize all instances of as
|
||||
// static members of MemType. Then use
|
||||
// to construct any new mem type.
|
||||
class LL_COMMON_API DeclareMemType
|
||||
{
|
||||
public:
|
||||
DeclareMemType(char const * st);
|
||||
~DeclareMemType();
|
||||
|
||||
S32 mID;
|
||||
char const * mName;
|
||||
|
||||
// array so we can map an index ID to Name
|
||||
static std::vector<char const *> mNameList;
|
||||
};
|
||||
|
||||
LLMemType(DeclareMemType& dt);
|
||||
~LLMemType();
|
||||
|
||||
static char const * getNameFromID(S32 id);
|
||||
|
||||
static DeclareMemType MTYPE_INIT;
|
||||
static DeclareMemType MTYPE_STARTUP;
|
||||
static DeclareMemType MTYPE_MAIN;
|
||||
static DeclareMemType MTYPE_FRAME;
|
||||
|
||||
static DeclareMemType MTYPE_GATHER_INPUT;
|
||||
static DeclareMemType MTYPE_JOY_KEY;
|
||||
|
||||
static DeclareMemType MTYPE_IDLE;
|
||||
static DeclareMemType MTYPE_IDLE_PUMP;
|
||||
static DeclareMemType MTYPE_IDLE_NETWORK;
|
||||
static DeclareMemType MTYPE_IDLE_UPDATE_REGIONS;
|
||||
static DeclareMemType MTYPE_IDLE_UPDATE_VIEWER_REGION;
|
||||
static DeclareMemType MTYPE_IDLE_UPDATE_SURFACE;
|
||||
static DeclareMemType MTYPE_IDLE_UPDATE_PARCEL_OVERLAY;
|
||||
static DeclareMemType MTYPE_IDLE_AUDIO;
|
||||
|
||||
static DeclareMemType MTYPE_CACHE_PROCESS_PENDING;
|
||||
static DeclareMemType MTYPE_CACHE_PROCESS_PENDING_ASKS;
|
||||
static DeclareMemType MTYPE_CACHE_PROCESS_PENDING_REPLIES;
|
||||
|
||||
static DeclareMemType MTYPE_MESSAGE_CHECK_ALL;
|
||||
static DeclareMemType MTYPE_MESSAGE_PROCESS_ACKS;
|
||||
|
||||
static DeclareMemType MTYPE_RENDER;
|
||||
static DeclareMemType MTYPE_SLEEP;
|
||||
|
||||
static DeclareMemType MTYPE_NETWORK;
|
||||
static DeclareMemType MTYPE_PHYSICS;
|
||||
static DeclareMemType MTYPE_INTERESTLIST;
|
||||
|
||||
static DeclareMemType MTYPE_IMAGEBASE;
|
||||
static DeclareMemType MTYPE_IMAGERAW;
|
||||
static DeclareMemType MTYPE_IMAGEFORMATTED;
|
||||
|
||||
static DeclareMemType MTYPE_APPFMTIMAGE;
|
||||
static DeclareMemType MTYPE_APPRAWIMAGE;
|
||||
static DeclareMemType MTYPE_APPAUXRAWIMAGE;
|
||||
|
||||
static DeclareMemType MTYPE_DRAWABLE;
|
||||
|
||||
static DeclareMemType MTYPE_OBJECT;
|
||||
static DeclareMemType MTYPE_OBJECT_PROCESS_UPDATE;
|
||||
static DeclareMemType MTYPE_OBJECT_PROCESS_UPDATE_CORE;
|
||||
|
||||
static DeclareMemType MTYPE_DISPLAY;
|
||||
static DeclareMemType MTYPE_DISPLAY_UPDATE;
|
||||
static DeclareMemType MTYPE_DISPLAY_UPDATE_CAMERA;
|
||||
static DeclareMemType MTYPE_DISPLAY_UPDATE_GEOM;
|
||||
static DeclareMemType MTYPE_DISPLAY_SWAP;
|
||||
static DeclareMemType MTYPE_DISPLAY_UPDATE_HUD;
|
||||
static DeclareMemType MTYPE_DISPLAY_GEN_REFLECTION;
|
||||
static DeclareMemType MTYPE_DISPLAY_IMAGE_UPDATE;
|
||||
static DeclareMemType MTYPE_DISPLAY_STATE_SORT;
|
||||
static DeclareMemType MTYPE_DISPLAY_SKY;
|
||||
static DeclareMemType MTYPE_DISPLAY_RENDER_GEOM;
|
||||
static DeclareMemType MTYPE_DISPLAY_RENDER_FLUSH;
|
||||
static DeclareMemType MTYPE_DISPLAY_RENDER_UI;
|
||||
static DeclareMemType MTYPE_DISPLAY_RENDER_ATTACHMENTS;
|
||||
|
||||
static DeclareMemType MTYPE_VERTEX_DATA;
|
||||
static DeclareMemType MTYPE_VERTEX_CONSTRUCTOR;
|
||||
static DeclareMemType MTYPE_VERTEX_DESTRUCTOR;
|
||||
static DeclareMemType MTYPE_VERTEX_CREATE_VERTICES;
|
||||
static DeclareMemType MTYPE_VERTEX_CREATE_INDICES;
|
||||
static DeclareMemType MTYPE_VERTEX_DESTROY_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_DESTROY_INDICES;
|
||||
static DeclareMemType MTYPE_VERTEX_UPDATE_VERTS;
|
||||
static DeclareMemType MTYPE_VERTEX_UPDATE_INDICES;
|
||||
static DeclareMemType MTYPE_VERTEX_ALLOCATE_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_RESIZE_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_MAP_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_MAP_BUFFER_VERTICES;
|
||||
static DeclareMemType MTYPE_VERTEX_MAP_BUFFER_INDICES;
|
||||
static DeclareMemType MTYPE_VERTEX_UNMAP_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_SET_STRIDE;
|
||||
static DeclareMemType MTYPE_VERTEX_SET_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_SETUP_VERTEX_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_CLEANUP_CLASS;
|
||||
|
||||
static DeclareMemType MTYPE_SPACE_PARTITION;
|
||||
|
||||
static DeclareMemType MTYPE_PIPELINE;
|
||||
static DeclareMemType MTYPE_PIPELINE_INIT;
|
||||
static DeclareMemType MTYPE_PIPELINE_CREATE_BUFFERS;
|
||||
static DeclareMemType MTYPE_PIPELINE_RESTORE_GL;
|
||||
static DeclareMemType MTYPE_PIPELINE_UNLOAD_SHADERS;
|
||||
static DeclareMemType MTYPE_PIPELINE_LIGHTING_DETAIL;
|
||||
static DeclareMemType MTYPE_PIPELINE_GET_POOL_TYPE;
|
||||
static DeclareMemType MTYPE_PIPELINE_ADD_POOL;
|
||||
static DeclareMemType MTYPE_PIPELINE_ALLOCATE_DRAWABLE;
|
||||
static DeclareMemType MTYPE_PIPELINE_ADD_OBJECT;
|
||||
static DeclareMemType MTYPE_PIPELINE_CREATE_OBJECTS;
|
||||
static DeclareMemType MTYPE_PIPELINE_UPDATE_MOVE;
|
||||
static DeclareMemType MTYPE_PIPELINE_UPDATE_GEOM;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_VISIBLE;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_MOVED;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_SHIFT;
|
||||
static DeclareMemType MTYPE_PIPELINE_SHIFT_OBJECTS;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_TEXTURED;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_REBUILD;
|
||||
static DeclareMemType MTYPE_PIPELINE_UPDATE_CULL;
|
||||
static DeclareMemType MTYPE_PIPELINE_STATE_SORT;
|
||||
static DeclareMemType MTYPE_PIPELINE_POST_SORT;
|
||||
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_HUD_ELS;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_HL;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_DEFFERRED;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_POST_DEF;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_SHADOW;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_SELECT;
|
||||
static DeclareMemType MTYPE_PIPELINE_REBUILD_POOLS;
|
||||
static DeclareMemType MTYPE_PIPELINE_QUICK_LOOKUP;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_OBJECTS;
|
||||
static DeclareMemType MTYPE_PIPELINE_GENERATE_IMPOSTOR;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_BLOOM;
|
||||
|
||||
static DeclareMemType MTYPE_UPKEEP_POOLS;
|
||||
|
||||
static DeclareMemType MTYPE_AVATAR;
|
||||
static DeclareMemType MTYPE_AVATAR_MESH;
|
||||
static DeclareMemType MTYPE_PARTICLES;
|
||||
static DeclareMemType MTYPE_REGIONS;
|
||||
|
||||
static DeclareMemType MTYPE_INVENTORY;
|
||||
static DeclareMemType MTYPE_INVENTORY_DRAW;
|
||||
static DeclareMemType MTYPE_INVENTORY_BUILD_NEW_VIEWS;
|
||||
static DeclareMemType MTYPE_INVENTORY_DO_FOLDER;
|
||||
static DeclareMemType MTYPE_INVENTORY_POST_BUILD;
|
||||
static DeclareMemType MTYPE_INVENTORY_FROM_XML;
|
||||
static DeclareMemType MTYPE_INVENTORY_CREATE_NEW_ITEM;
|
||||
static DeclareMemType MTYPE_INVENTORY_VIEW_INIT;
|
||||
static DeclareMemType MTYPE_INVENTORY_VIEW_SHOW;
|
||||
static DeclareMemType MTYPE_INVENTORY_VIEW_TOGGLE;
|
||||
|
||||
static DeclareMemType MTYPE_ANIMATION;
|
||||
static DeclareMemType MTYPE_VOLUME;
|
||||
static DeclareMemType MTYPE_PRIMITIVE;
|
||||
|
||||
static DeclareMemType MTYPE_SCRIPT;
|
||||
static DeclareMemType MTYPE_SCRIPT_RUN;
|
||||
static DeclareMemType MTYPE_SCRIPT_BYTECODE;
|
||||
|
||||
static DeclareMemType MTYPE_IO_PUMP;
|
||||
static DeclareMemType MTYPE_IO_TCP;
|
||||
static DeclareMemType MTYPE_IO_BUFFER;
|
||||
static DeclareMemType MTYPE_IO_HTTP_SERVER;
|
||||
static DeclareMemType MTYPE_IO_SD_SERVER;
|
||||
static DeclareMemType MTYPE_IO_SD_CLIENT;
|
||||
static DeclareMemType MTYPE_IO_URL_REQUEST;
|
||||
|
||||
static DeclareMemType MTYPE_DIRECTX_INIT;
|
||||
|
||||
static DeclareMemType MTYPE_TEMP1;
|
||||
static DeclareMemType MTYPE_TEMP2;
|
||||
static DeclareMemType MTYPE_TEMP3;
|
||||
static DeclareMemType MTYPE_TEMP4;
|
||||
static DeclareMemType MTYPE_TEMP5;
|
||||
static DeclareMemType MTYPE_TEMP6;
|
||||
static DeclareMemType MTYPE_TEMP7;
|
||||
static DeclareMemType MTYPE_TEMP8;
|
||||
static DeclareMemType MTYPE_TEMP9;
|
||||
|
||||
static DeclareMemType MTYPE_OTHER; // Special; used by display code
|
||||
|
||||
S32 mTypeIndex;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @file llmemtype.h
|
||||
* @brief Runtime memory usage debugging utilities.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2005&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2005-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_MEMTYPE_H
|
||||
#define LL_MEMTYPE_H
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#include "linden_common.h"
|
||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
// WARNING: Never commit with MEM_TRACK_MEM == 1
|
||||
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
#define MEM_TRACK_MEM (0 && LL_WINDOWS)
|
||||
|
||||
#include <vector>
|
||||
|
||||
#define MEM_TYPE_NEW(T)
|
||||
|
||||
class LL_COMMON_API LLMemType
|
||||
{
|
||||
public:
|
||||
|
||||
// class we'll initialize all instances of as
|
||||
// static members of MemType. Then use
|
||||
// to construct any new mem type.
|
||||
class LL_COMMON_API DeclareMemType
|
||||
{
|
||||
public:
|
||||
DeclareMemType(char const * st);
|
||||
~DeclareMemType();
|
||||
|
||||
S32 mID;
|
||||
char const * mName;
|
||||
|
||||
// array so we can map an index ID to Name
|
||||
static std::vector<char const *> mNameList;
|
||||
};
|
||||
|
||||
LLMemType(DeclareMemType& dt);
|
||||
~LLMemType();
|
||||
|
||||
static char const * getNameFromID(S32 id);
|
||||
|
||||
static DeclareMemType MTYPE_INIT;
|
||||
static DeclareMemType MTYPE_STARTUP;
|
||||
static DeclareMemType MTYPE_MAIN;
|
||||
static DeclareMemType MTYPE_FRAME;
|
||||
|
||||
static DeclareMemType MTYPE_GATHER_INPUT;
|
||||
static DeclareMemType MTYPE_JOY_KEY;
|
||||
|
||||
static DeclareMemType MTYPE_IDLE;
|
||||
static DeclareMemType MTYPE_IDLE_PUMP;
|
||||
static DeclareMemType MTYPE_IDLE_NETWORK;
|
||||
static DeclareMemType MTYPE_IDLE_UPDATE_REGIONS;
|
||||
static DeclareMemType MTYPE_IDLE_UPDATE_VIEWER_REGION;
|
||||
static DeclareMemType MTYPE_IDLE_UPDATE_SURFACE;
|
||||
static DeclareMemType MTYPE_IDLE_UPDATE_PARCEL_OVERLAY;
|
||||
static DeclareMemType MTYPE_IDLE_AUDIO;
|
||||
|
||||
static DeclareMemType MTYPE_CACHE_PROCESS_PENDING;
|
||||
static DeclareMemType MTYPE_CACHE_PROCESS_PENDING_ASKS;
|
||||
static DeclareMemType MTYPE_CACHE_PROCESS_PENDING_REPLIES;
|
||||
|
||||
static DeclareMemType MTYPE_MESSAGE_CHECK_ALL;
|
||||
static DeclareMemType MTYPE_MESSAGE_PROCESS_ACKS;
|
||||
|
||||
static DeclareMemType MTYPE_RENDER;
|
||||
static DeclareMemType MTYPE_SLEEP;
|
||||
|
||||
static DeclareMemType MTYPE_NETWORK;
|
||||
static DeclareMemType MTYPE_PHYSICS;
|
||||
static DeclareMemType MTYPE_INTERESTLIST;
|
||||
|
||||
static DeclareMemType MTYPE_IMAGEBASE;
|
||||
static DeclareMemType MTYPE_IMAGERAW;
|
||||
static DeclareMemType MTYPE_IMAGEFORMATTED;
|
||||
|
||||
static DeclareMemType MTYPE_APPFMTIMAGE;
|
||||
static DeclareMemType MTYPE_APPRAWIMAGE;
|
||||
static DeclareMemType MTYPE_APPAUXRAWIMAGE;
|
||||
|
||||
static DeclareMemType MTYPE_DRAWABLE;
|
||||
|
||||
static DeclareMemType MTYPE_OBJECT;
|
||||
static DeclareMemType MTYPE_OBJECT_PROCESS_UPDATE;
|
||||
static DeclareMemType MTYPE_OBJECT_PROCESS_UPDATE_CORE;
|
||||
|
||||
static DeclareMemType MTYPE_DISPLAY;
|
||||
static DeclareMemType MTYPE_DISPLAY_UPDATE;
|
||||
static DeclareMemType MTYPE_DISPLAY_UPDATE_CAMERA;
|
||||
static DeclareMemType MTYPE_DISPLAY_UPDATE_GEOM;
|
||||
static DeclareMemType MTYPE_DISPLAY_SWAP;
|
||||
static DeclareMemType MTYPE_DISPLAY_UPDATE_HUD;
|
||||
static DeclareMemType MTYPE_DISPLAY_GEN_REFLECTION;
|
||||
static DeclareMemType MTYPE_DISPLAY_IMAGE_UPDATE;
|
||||
static DeclareMemType MTYPE_DISPLAY_STATE_SORT;
|
||||
static DeclareMemType MTYPE_DISPLAY_SKY;
|
||||
static DeclareMemType MTYPE_DISPLAY_RENDER_GEOM;
|
||||
static DeclareMemType MTYPE_DISPLAY_RENDER_FLUSH;
|
||||
static DeclareMemType MTYPE_DISPLAY_RENDER_UI;
|
||||
static DeclareMemType MTYPE_DISPLAY_RENDER_ATTACHMENTS;
|
||||
|
||||
static DeclareMemType MTYPE_VERTEX_DATA;
|
||||
static DeclareMemType MTYPE_VERTEX_CONSTRUCTOR;
|
||||
static DeclareMemType MTYPE_VERTEX_DESTRUCTOR;
|
||||
static DeclareMemType MTYPE_VERTEX_CREATE_VERTICES;
|
||||
static DeclareMemType MTYPE_VERTEX_CREATE_INDICES;
|
||||
static DeclareMemType MTYPE_VERTEX_DESTROY_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_DESTROY_INDICES;
|
||||
static DeclareMemType MTYPE_VERTEX_UPDATE_VERTS;
|
||||
static DeclareMemType MTYPE_VERTEX_UPDATE_INDICES;
|
||||
static DeclareMemType MTYPE_VERTEX_ALLOCATE_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_RESIZE_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_MAP_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_MAP_BUFFER_VERTICES;
|
||||
static DeclareMemType MTYPE_VERTEX_MAP_BUFFER_INDICES;
|
||||
static DeclareMemType MTYPE_VERTEX_UNMAP_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_SET_STRIDE;
|
||||
static DeclareMemType MTYPE_VERTEX_SET_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_SETUP_VERTEX_BUFFER;
|
||||
static DeclareMemType MTYPE_VERTEX_CLEANUP_CLASS;
|
||||
|
||||
static DeclareMemType MTYPE_SPACE_PARTITION;
|
||||
|
||||
static DeclareMemType MTYPE_PIPELINE;
|
||||
static DeclareMemType MTYPE_PIPELINE_INIT;
|
||||
static DeclareMemType MTYPE_PIPELINE_CREATE_BUFFERS;
|
||||
static DeclareMemType MTYPE_PIPELINE_RESTORE_GL;
|
||||
static DeclareMemType MTYPE_PIPELINE_UNLOAD_SHADERS;
|
||||
static DeclareMemType MTYPE_PIPELINE_LIGHTING_DETAIL;
|
||||
static DeclareMemType MTYPE_PIPELINE_GET_POOL_TYPE;
|
||||
static DeclareMemType MTYPE_PIPELINE_ADD_POOL;
|
||||
static DeclareMemType MTYPE_PIPELINE_ALLOCATE_DRAWABLE;
|
||||
static DeclareMemType MTYPE_PIPELINE_ADD_OBJECT;
|
||||
static DeclareMemType MTYPE_PIPELINE_CREATE_OBJECTS;
|
||||
static DeclareMemType MTYPE_PIPELINE_UPDATE_MOVE;
|
||||
static DeclareMemType MTYPE_PIPELINE_UPDATE_GEOM;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_VISIBLE;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_MOVED;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_SHIFT;
|
||||
static DeclareMemType MTYPE_PIPELINE_SHIFT_OBJECTS;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_TEXTURED;
|
||||
static DeclareMemType MTYPE_PIPELINE_MARK_REBUILD;
|
||||
static DeclareMemType MTYPE_PIPELINE_UPDATE_CULL;
|
||||
static DeclareMemType MTYPE_PIPELINE_STATE_SORT;
|
||||
static DeclareMemType MTYPE_PIPELINE_POST_SORT;
|
||||
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_HUD_ELS;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_HL;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_DEFFERRED;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_POST_DEF;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_GEOM_SHADOW;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_SELECT;
|
||||
static DeclareMemType MTYPE_PIPELINE_REBUILD_POOLS;
|
||||
static DeclareMemType MTYPE_PIPELINE_QUICK_LOOKUP;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_OBJECTS;
|
||||
static DeclareMemType MTYPE_PIPELINE_GENERATE_IMPOSTOR;
|
||||
static DeclareMemType MTYPE_PIPELINE_RENDER_BLOOM;
|
||||
|
||||
static DeclareMemType MTYPE_UPKEEP_POOLS;
|
||||
|
||||
static DeclareMemType MTYPE_AVATAR;
|
||||
static DeclareMemType MTYPE_AVATAR_MESH;
|
||||
static DeclareMemType MTYPE_PARTICLES;
|
||||
static DeclareMemType MTYPE_REGIONS;
|
||||
|
||||
static DeclareMemType MTYPE_INVENTORY;
|
||||
static DeclareMemType MTYPE_INVENTORY_DRAW;
|
||||
static DeclareMemType MTYPE_INVENTORY_BUILD_NEW_VIEWS;
|
||||
static DeclareMemType MTYPE_INVENTORY_DO_FOLDER;
|
||||
static DeclareMemType MTYPE_INVENTORY_POST_BUILD;
|
||||
static DeclareMemType MTYPE_INVENTORY_FROM_XML;
|
||||
static DeclareMemType MTYPE_INVENTORY_CREATE_NEW_ITEM;
|
||||
static DeclareMemType MTYPE_INVENTORY_VIEW_INIT;
|
||||
static DeclareMemType MTYPE_INVENTORY_VIEW_SHOW;
|
||||
static DeclareMemType MTYPE_INVENTORY_VIEW_TOGGLE;
|
||||
|
||||
static DeclareMemType MTYPE_ANIMATION;
|
||||
static DeclareMemType MTYPE_VOLUME;
|
||||
static DeclareMemType MTYPE_PRIMITIVE;
|
||||
|
||||
static DeclareMemType MTYPE_SCRIPT;
|
||||
static DeclareMemType MTYPE_SCRIPT_RUN;
|
||||
static DeclareMemType MTYPE_SCRIPT_BYTECODE;
|
||||
|
||||
static DeclareMemType MTYPE_IO_PUMP;
|
||||
static DeclareMemType MTYPE_IO_TCP;
|
||||
static DeclareMemType MTYPE_IO_BUFFER;
|
||||
static DeclareMemType MTYPE_IO_HTTP_SERVER;
|
||||
static DeclareMemType MTYPE_IO_SD_SERVER;
|
||||
static DeclareMemType MTYPE_IO_SD_CLIENT;
|
||||
static DeclareMemType MTYPE_IO_URL_REQUEST;
|
||||
|
||||
static DeclareMemType MTYPE_DIRECTX_INIT;
|
||||
|
||||
static DeclareMemType MTYPE_TEMP1;
|
||||
static DeclareMemType MTYPE_TEMP2;
|
||||
static DeclareMemType MTYPE_TEMP3;
|
||||
static DeclareMemType MTYPE_TEMP4;
|
||||
static DeclareMemType MTYPE_TEMP5;
|
||||
static DeclareMemType MTYPE_TEMP6;
|
||||
static DeclareMemType MTYPE_TEMP7;
|
||||
static DeclareMemType MTYPE_TEMP8;
|
||||
static DeclareMemType MTYPE_TEMP9;
|
||||
|
||||
static DeclareMemType MTYPE_OTHER; // Special; used by display code
|
||||
|
||||
S32 mTypeIndex;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1,168 +1,168 @@
|
|||
/**
|
||||
* @file llpreprocessor.h
|
||||
* @brief This file should be included in all Linden Lab files and
|
||||
* should only contain special preprocessor directives
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LLPREPROCESSOR_H
|
||||
#define LLPREPROCESSOR_H
|
||||
|
||||
// Figure out endianness of platform
|
||||
#ifdef LL_LINUX
|
||||
#define __ENABLE_WSTRING
|
||||
#include <endian.h>
|
||||
#endif // LL_LINUX
|
||||
|
||||
#if LL_SOLARIS
|
||||
# ifdef __sparc // Since we're talking Solaris 10 and up, only 64 bit is supported.
|
||||
# define LL_BIG_ENDIAN 1
|
||||
# define LL_SOLARIS_ALIGNED_CPU 1 // used to designate issues where SPARC alignment is addressed
|
||||
# define LL_SOLARIS_NON_MESA_GL 1 // The SPARC GL does not provide a MESA-based GL API
|
||||
# endif
|
||||
# include <sys/isa_defs.h> // ensure we know which end is up
|
||||
#endif // LL_SOLARIS
|
||||
|
||||
#if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)) || (defined(LL_SOLARIS) && defined(__i386)))
|
||||
#define LL_LITTLE_ENDIAN 1
|
||||
#else
|
||||
#define LL_BIG_ENDIAN 1
|
||||
#endif
|
||||
|
||||
// Per-compiler switches
|
||||
#ifdef __GNUC__
|
||||
#define LL_FORCE_INLINE inline __attribute__((always_inline))
|
||||
#else
|
||||
#define LL_FORCE_INLINE __forceinline
|
||||
#endif
|
||||
|
||||
// Figure out differences between compilers
|
||||
#if defined(__GNUC__)
|
||||
#define GCC_VERSION (__GNUC__ * 10000 \
|
||||
+ __GNUC_MINOR__ * 100 \
|
||||
+ __GNUC_PATCHLEVEL__)
|
||||
#ifndef LL_GNUC
|
||||
#define LL_GNUC 1
|
||||
#endif
|
||||
#elif defined(__MSVC_VER__) || defined(_MSC_VER)
|
||||
#ifndef LL_MSVC
|
||||
#define LL_MSVC 1
|
||||
#endif
|
||||
#if _MSC_VER < 1400
|
||||
#define LL_MSVC7 //Visual C++ 2003 or earlier
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Deal with minor differences on Unixy OSes.
|
||||
#if LL_DARWIN || LL_LINUX
|
||||
// Different name, same functionality.
|
||||
#define stricmp strcasecmp
|
||||
#define strnicmp strncasecmp
|
||||
|
||||
// Not sure why this is different, but...
|
||||
#ifndef MAX_PATH
|
||||
#define MAX_PATH PATH_MAX
|
||||
#endif // not MAX_PATH
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// Static linking with apr on windows needs to be declared.
|
||||
#if LL_WINDOWS && !LL_COMMON_LINK_SHARED
|
||||
#ifndef APR_DECLARE_STATIC
|
||||
#define APR_DECLARE_STATIC // For APR on Windows
|
||||
#endif
|
||||
#ifndef APU_DECLARE_STATIC
|
||||
#define APU_DECLARE_STATIC // For APR util on Windows
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(LL_WINDOWS)
|
||||
#define BOOST_REGEX_NO_LIB 1
|
||||
#define CURL_STATICLIB 1
|
||||
#ifndef XML_STATIC
|
||||
#define XML_STATIC
|
||||
#endif
|
||||
#endif // LL_WINDOWS
|
||||
|
||||
|
||||
// Deal with VC6 problems
|
||||
#if LL_MSVC
|
||||
#pragma warning( 3 : 4701 ) // "local variable used without being initialized" Treat this as level 3, not level 4.
|
||||
#pragma warning( 3 : 4702 ) // "unreachable code" Treat this as level 3, not level 4.
|
||||
#pragma warning( 3 : 4189 ) // "local variable initialized but not referenced" Treat this as level 3, not level 4.
|
||||
//#pragma warning( 3 : 4018 ) // "signed/unsigned mismatch" Treat this as level 3, not level 4.
|
||||
#pragma warning( 3 : 4263 ) // 'function' : member function does not override any base class virtual member function
|
||||
#pragma warning( 3 : 4264 ) // "'virtual_function' : no override available for virtual member function from base 'class'; function is hidden"
|
||||
#pragma warning( 3 : 4265 ) // "class has virtual functions, but destructor is not virtual"
|
||||
#pragma warning( 3 : 4266 ) // 'function' : no override available for virtual member function from base 'type'; function is hidden
|
||||
#pragma warning( disable : 4284 ) // silly MS warning deep inside their <map> include file
|
||||
#pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation.
|
||||
#pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
|
||||
#pragma warning( disable : 4996 ) // warning: deprecated
|
||||
|
||||
// level 4 warnings that we need to disable:
|
||||
#pragma warning (disable : 4100) // unreferenced formal parameter
|
||||
#pragma warning (disable : 4127) // conditional expression is constant (e.g. while(1) )
|
||||
#pragma warning (disable : 4244) // possible loss of data on conversions
|
||||
#pragma warning (disable : 4396) // the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
|
||||
#pragma warning (disable : 4512) // assignment operator could not be generated
|
||||
#pragma warning (disable : 4706) // assignment within conditional (even if((x = y)) )
|
||||
|
||||
#pragma warning (disable : 4251) // member needs to have dll-interface to be used by clients of class
|
||||
#pragma warning (disable : 4275) // non dll-interface class used as base for dll-interface class
|
||||
#endif // LL_MSVC
|
||||
|
||||
#if LL_WINDOWS
|
||||
#define LL_DLLEXPORT __declspec(dllexport)
|
||||
#define LL_DLLIMPORT __declspec(dllimport)
|
||||
#elif LL_LINUX
|
||||
#define LL_DLLEXPORT __attribute__ ((visibility("default")))
|
||||
#define LL_DLLIMPORT
|
||||
#else
|
||||
#define LL_DLLEXPORT
|
||||
#define LL_DLLIMPORT
|
||||
#endif // LL_WINDOWS
|
||||
|
||||
#if LL_COMMON_LINK_SHARED
|
||||
// CMake automagically defines llcommon_EXPORTS only when building llcommon
|
||||
// sources, and only when llcommon is a shared library (i.e. when
|
||||
// LL_COMMON_LINK_SHARED). We must still test LL_COMMON_LINK_SHARED because
|
||||
// otherwise we can't distinguish between (non-llcommon source) and (llcommon
|
||||
// not shared).
|
||||
# if defined(llcommon_EXPORTS)
|
||||
# define LL_COMMON_API LL_DLLEXPORT
|
||||
# else //llcommon_EXPORTS
|
||||
# define LL_COMMON_API LL_DLLIMPORT
|
||||
# endif //llcommon_EXPORTS
|
||||
#else // LL_COMMON_LINK_SHARED
|
||||
# define LL_COMMON_API
|
||||
#endif // LL_COMMON_LINK_SHARED
|
||||
|
||||
#endif // not LL_LINDEN_PREPROCESSOR_H
|
||||
/**
|
||||
* @file llpreprocessor.h
|
||||
* @brief This file should be included in all Linden Lab files and
|
||||
* should only contain special preprocessor directives
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LLPREPROCESSOR_H
|
||||
#define LLPREPROCESSOR_H
|
||||
|
||||
// Figure out endianness of platform
|
||||
#ifdef LL_LINUX
|
||||
#define __ENABLE_WSTRING
|
||||
#include <endian.h>
|
||||
#endif // LL_LINUX
|
||||
|
||||
#if LL_SOLARIS
|
||||
# ifdef __sparc // Since we're talking Solaris 10 and up, only 64 bit is supported.
|
||||
# define LL_BIG_ENDIAN 1
|
||||
# define LL_SOLARIS_ALIGNED_CPU 1 // used to designate issues where SPARC alignment is addressed
|
||||
# define LL_SOLARIS_NON_MESA_GL 1 // The SPARC GL does not provide a MESA-based GL API
|
||||
# endif
|
||||
# include <sys/isa_defs.h> // ensure we know which end is up
|
||||
#endif // LL_SOLARIS
|
||||
|
||||
#if (defined(LL_WINDOWS) || (defined(LL_LINUX) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || (defined(LL_DARWIN) && defined(__LITTLE_ENDIAN__)) || (defined(LL_SOLARIS) && defined(__i386)))
|
||||
#define LL_LITTLE_ENDIAN 1
|
||||
#else
|
||||
#define LL_BIG_ENDIAN 1
|
||||
#endif
|
||||
|
||||
// Per-compiler switches
|
||||
#ifdef __GNUC__
|
||||
#define LL_FORCE_INLINE inline __attribute__((always_inline))
|
||||
#else
|
||||
#define LL_FORCE_INLINE __forceinline
|
||||
#endif
|
||||
|
||||
// Figure out differences between compilers
|
||||
#if defined(__GNUC__)
|
||||
#define GCC_VERSION (__GNUC__ * 10000 \
|
||||
+ __GNUC_MINOR__ * 100 \
|
||||
+ __GNUC_PATCHLEVEL__)
|
||||
#ifndef LL_GNUC
|
||||
#define LL_GNUC 1
|
||||
#endif
|
||||
#elif defined(__MSVC_VER__) || defined(_MSC_VER)
|
||||
#ifndef LL_MSVC
|
||||
#define LL_MSVC 1
|
||||
#endif
|
||||
#if _MSC_VER < 1400
|
||||
#define LL_MSVC7 //Visual C++ 2003 or earlier
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Deal with minor differences on Unixy OSes.
|
||||
#if LL_DARWIN || LL_LINUX
|
||||
// Different name, same functionality.
|
||||
#define stricmp strcasecmp
|
||||
#define strnicmp strncasecmp
|
||||
|
||||
// Not sure why this is different, but...
|
||||
#ifndef MAX_PATH
|
||||
#define MAX_PATH PATH_MAX
|
||||
#endif // not MAX_PATH
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// Static linking with apr on windows needs to be declared.
|
||||
#if LL_WINDOWS && !LL_COMMON_LINK_SHARED
|
||||
#ifndef APR_DECLARE_STATIC
|
||||
#define APR_DECLARE_STATIC // For APR on Windows
|
||||
#endif
|
||||
#ifndef APU_DECLARE_STATIC
|
||||
#define APU_DECLARE_STATIC // For APR util on Windows
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(LL_WINDOWS)
|
||||
#define BOOST_REGEX_NO_LIB 1
|
||||
#define CURL_STATICLIB 1
|
||||
#ifndef XML_STATIC
|
||||
#define XML_STATIC
|
||||
#endif
|
||||
#endif // LL_WINDOWS
|
||||
|
||||
|
||||
// Deal with VC6 problems
|
||||
#if LL_MSVC
|
||||
#pragma warning( 3 : 4701 ) // "local variable used without being initialized" Treat this as level 3, not level 4.
|
||||
#pragma warning( 3 : 4702 ) // "unreachable code" Treat this as level 3, not level 4.
|
||||
#pragma warning( 3 : 4189 ) // "local variable initialized but not referenced" Treat this as level 3, not level 4.
|
||||
//#pragma warning( 3 : 4018 ) // "signed/unsigned mismatch" Treat this as level 3, not level 4.
|
||||
#pragma warning( 3 : 4263 ) // 'function' : member function does not override any base class virtual member function
|
||||
#pragma warning( 3 : 4264 ) // "'virtual_function' : no override available for virtual member function from base 'class'; function is hidden"
|
||||
#pragma warning( 3 : 4265 ) // "class has virtual functions, but destructor is not virtual"
|
||||
#pragma warning( 3 : 4266 ) // 'function' : no override available for virtual member function from base 'type'; function is hidden
|
||||
#pragma warning( disable : 4284 ) // silly MS warning deep inside their <map> include file
|
||||
#pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation.
|
||||
#pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
|
||||
#pragma warning( disable : 4996 ) // warning: deprecated
|
||||
|
||||
// level 4 warnings that we need to disable:
|
||||
#pragma warning (disable : 4100) // unreferenced formal parameter
|
||||
#pragma warning (disable : 4127) // conditional expression is constant (e.g. while(1) )
|
||||
#pragma warning (disable : 4244) // possible loss of data on conversions
|
||||
#pragma warning (disable : 4396) // the inline specifier cannot be used when a friend declaration refers to a specialization of a function template
|
||||
#pragma warning (disable : 4512) // assignment operator could not be generated
|
||||
#pragma warning (disable : 4706) // assignment within conditional (even if((x = y)) )
|
||||
|
||||
#pragma warning (disable : 4251) // member needs to have dll-interface to be used by clients of class
|
||||
#pragma warning (disable : 4275) // non dll-interface class used as base for dll-interface class
|
||||
#endif // LL_MSVC
|
||||
|
||||
#if LL_WINDOWS
|
||||
#define LL_DLLEXPORT __declspec(dllexport)
|
||||
#define LL_DLLIMPORT __declspec(dllimport)
|
||||
#elif LL_LINUX
|
||||
#define LL_DLLEXPORT __attribute__ ((visibility("default")))
|
||||
#define LL_DLLIMPORT
|
||||
#else
|
||||
#define LL_DLLEXPORT
|
||||
#define LL_DLLIMPORT
|
||||
#endif // LL_WINDOWS
|
||||
|
||||
#if LL_COMMON_LINK_SHARED
|
||||
// CMake automagically defines llcommon_EXPORTS only when building llcommon
|
||||
// sources, and only when llcommon is a shared library (i.e. when
|
||||
// LL_COMMON_LINK_SHARED). We must still test LL_COMMON_LINK_SHARED because
|
||||
// otherwise we can't distinguish between (non-llcommon source) and (llcommon
|
||||
// not shared).
|
||||
# if defined(llcommon_EXPORTS)
|
||||
# define LL_COMMON_API LL_DLLEXPORT
|
||||
# else //llcommon_EXPORTS
|
||||
# define LL_COMMON_API LL_DLLIMPORT
|
||||
# endif //llcommon_EXPORTS
|
||||
#else // LL_COMMON_LINK_SHARED
|
||||
# define LL_COMMON_API
|
||||
#endif // LL_COMMON_LINK_SHARED
|
||||
|
||||
#endif // not LL_LINDEN_PREPROCESSOR_H
|
||||
|
|
|
|||
|
|
@ -1,142 +1,142 @@
|
|||
/**
|
||||
* @file llstacktrace.cpp
|
||||
* @brief stack tracing functionality
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
#include "llstacktrace.h"
|
||||
|
||||
#ifdef LL_WINDOWS
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#include "windows.h"
|
||||
#include "Dbghelp.h"
|
||||
|
||||
typedef USHORT NTAPI RtlCaptureStackBackTrace_Function(
|
||||
IN ULONG frames_to_skip,
|
||||
IN ULONG frames_to_capture,
|
||||
OUT PVOID *backtrace,
|
||||
OUT PULONG backtrace_hash);
|
||||
|
||||
static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
|
||||
(RtlCaptureStackBackTrace_Function*)
|
||||
GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace");
|
||||
|
||||
bool ll_get_stack_trace(std::vector<std::string>& lines)
|
||||
{
|
||||
const S32 MAX_STACK_DEPTH = 32;
|
||||
const S32 STRING_NAME_LENGTH = 200;
|
||||
const S32 FRAME_SKIP = 2;
|
||||
static BOOL symbolsLoaded = false;
|
||||
static BOOL firstCall = true;
|
||||
|
||||
HANDLE hProc = GetCurrentProcess();
|
||||
|
||||
// load the symbols if they're not loaded
|
||||
if(!symbolsLoaded && firstCall)
|
||||
{
|
||||
symbolsLoaded = SymInitialize(hProc, NULL, true);
|
||||
firstCall = false;
|
||||
}
|
||||
|
||||
// if loaded, get the call stack
|
||||
if(symbolsLoaded)
|
||||
{
|
||||
// create the frames to hold the addresses
|
||||
void* frames[MAX_STACK_DEPTH];
|
||||
memset(frames, 0, sizeof(void*)*MAX_STACK_DEPTH);
|
||||
S32 depth = 0;
|
||||
|
||||
// get the addresses
|
||||
depth = RtlCaptureStackBackTrace_fn(FRAME_SKIP, MAX_STACK_DEPTH, frames, NULL);
|
||||
|
||||
IMAGEHLP_LINE64 line;
|
||||
memset(&line, 0, sizeof(IMAGEHLP_LINE64));
|
||||
line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
|
||||
|
||||
// create something to hold address info
|
||||
PIMAGEHLP_SYMBOL64 pSym;
|
||||
pSym = (PIMAGEHLP_SYMBOL64)malloc(sizeof(IMAGEHLP_SYMBOL64) + STRING_NAME_LENGTH);
|
||||
memset(pSym, 0, sizeof(IMAGEHLP_SYMBOL64) + STRING_NAME_LENGTH);
|
||||
pSym->MaxNameLength = STRING_NAME_LENGTH;
|
||||
pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64);
|
||||
|
||||
// get address info for each address frame
|
||||
// and store
|
||||
for(S32 i=0; i < depth; i++)
|
||||
{
|
||||
std::stringstream stack_line;
|
||||
BOOL ret;
|
||||
|
||||
DWORD64 addr = (DWORD64)frames[i];
|
||||
ret = SymGetSymFromAddr64(hProc, addr, 0, pSym);
|
||||
if(ret)
|
||||
{
|
||||
stack_line << pSym->Name << " ";
|
||||
}
|
||||
|
||||
DWORD dummy;
|
||||
ret = SymGetLineFromAddr64(hProc, addr, &dummy, &line);
|
||||
if(ret)
|
||||
{
|
||||
std::string file_name = line.FileName;
|
||||
std::string::size_type index = file_name.rfind("\\");
|
||||
stack_line << file_name.substr(index + 1, file_name.size()) << ":" << line.LineNumber;
|
||||
}
|
||||
|
||||
lines.push_back(stack_line.str());
|
||||
}
|
||||
|
||||
free(pSym);
|
||||
|
||||
// TODO: figure out a way to cleanup symbol loading
|
||||
// Not hugely necessary, however.
|
||||
//SymCleanup(hProc);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
lines.push_back("Stack Trace Failed. PDB symbol info not loaded");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
bool ll_get_stack_trace(std::vector<std::string>& lines)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @file llstacktrace.cpp
|
||||
* @brief stack tracing functionality
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
#include "llstacktrace.h"
|
||||
|
||||
#ifdef LL_WINDOWS
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#include "windows.h"
|
||||
#include "Dbghelp.h"
|
||||
|
||||
typedef USHORT NTAPI RtlCaptureStackBackTrace_Function(
|
||||
IN ULONG frames_to_skip,
|
||||
IN ULONG frames_to_capture,
|
||||
OUT PVOID *backtrace,
|
||||
OUT PULONG backtrace_hash);
|
||||
|
||||
static RtlCaptureStackBackTrace_Function* const RtlCaptureStackBackTrace_fn =
|
||||
(RtlCaptureStackBackTrace_Function*)
|
||||
GetProcAddress(GetModuleHandleA("ntdll.dll"), "RtlCaptureStackBackTrace");
|
||||
|
||||
bool ll_get_stack_trace(std::vector<std::string>& lines)
|
||||
{
|
||||
const S32 MAX_STACK_DEPTH = 32;
|
||||
const S32 STRING_NAME_LENGTH = 200;
|
||||
const S32 FRAME_SKIP = 2;
|
||||
static BOOL symbolsLoaded = false;
|
||||
static BOOL firstCall = true;
|
||||
|
||||
HANDLE hProc = GetCurrentProcess();
|
||||
|
||||
// load the symbols if they're not loaded
|
||||
if(!symbolsLoaded && firstCall)
|
||||
{
|
||||
symbolsLoaded = SymInitialize(hProc, NULL, true);
|
||||
firstCall = false;
|
||||
}
|
||||
|
||||
// if loaded, get the call stack
|
||||
if(symbolsLoaded)
|
||||
{
|
||||
// create the frames to hold the addresses
|
||||
void* frames[MAX_STACK_DEPTH];
|
||||
memset(frames, 0, sizeof(void*)*MAX_STACK_DEPTH);
|
||||
S32 depth = 0;
|
||||
|
||||
// get the addresses
|
||||
depth = RtlCaptureStackBackTrace_fn(FRAME_SKIP, MAX_STACK_DEPTH, frames, NULL);
|
||||
|
||||
IMAGEHLP_LINE64 line;
|
||||
memset(&line, 0, sizeof(IMAGEHLP_LINE64));
|
||||
line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
|
||||
|
||||
// create something to hold address info
|
||||
PIMAGEHLP_SYMBOL64 pSym;
|
||||
pSym = (PIMAGEHLP_SYMBOL64)malloc(sizeof(IMAGEHLP_SYMBOL64) + STRING_NAME_LENGTH);
|
||||
memset(pSym, 0, sizeof(IMAGEHLP_SYMBOL64) + STRING_NAME_LENGTH);
|
||||
pSym->MaxNameLength = STRING_NAME_LENGTH;
|
||||
pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64);
|
||||
|
||||
// get address info for each address frame
|
||||
// and store
|
||||
for(S32 i=0; i < depth; i++)
|
||||
{
|
||||
std::stringstream stack_line;
|
||||
BOOL ret;
|
||||
|
||||
DWORD64 addr = (DWORD64)frames[i];
|
||||
ret = SymGetSymFromAddr64(hProc, addr, 0, pSym);
|
||||
if(ret)
|
||||
{
|
||||
stack_line << pSym->Name << " ";
|
||||
}
|
||||
|
||||
DWORD dummy;
|
||||
ret = SymGetLineFromAddr64(hProc, addr, &dummy, &line);
|
||||
if(ret)
|
||||
{
|
||||
std::string file_name = line.FileName;
|
||||
std::string::size_type index = file_name.rfind("\\");
|
||||
stack_line << file_name.substr(index + 1, file_name.size()) << ":" << line.LineNumber;
|
||||
}
|
||||
|
||||
lines.push_back(stack_line.str());
|
||||
}
|
||||
|
||||
free(pSym);
|
||||
|
||||
// TODO: figure out a way to cleanup symbol loading
|
||||
// Not hugely necessary, however.
|
||||
//SymCleanup(hProc);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
lines.push_back("Stack Trace Failed. PDB symbol info not loaded");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
bool ll_get_stack_trace(std::vector<std::string>& lines)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -1,44 +1,44 @@
|
|||
/**
|
||||
* @file llstacktrace.h
|
||||
* @brief stack trace functions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
#ifndef LL_LLSTACKTRACE_H
|
||||
#define LL_LLSTACKTRACE_H
|
||||
|
||||
#include "stdtypes.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
LL_COMMON_API bool ll_get_stack_trace(std::vector<std::string>& lines);
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @file llstacktrace.h
|
||||
* @brief stack trace functions
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
#ifndef LL_LLSTACKTRACE_H
|
||||
#define LL_LLSTACKTRACE_H
|
||||
|
||||
#include "stdtypes.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
LL_COMMON_API bool ll_get_stack_trace(std::vector<std::string>& lines);
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,291 +1,291 @@
|
|||
<?xml version="1.0" ?>
|
||||
<llsd>
|
||||
<map>
|
||||
<key>FirstAppearance</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstAppearance warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstAttach</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstAttach warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstBalanceDecrease</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstBalanceDecrease warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstBalanceIncrease</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstBalanceIncrease warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstBuild</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstBuild warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstDebugMenus</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstDebugMenus warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstFlexible</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstFlexible warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstGoTo</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstGoTo warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstInventory</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstInventory warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstLeftClickNoHit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstLeftClickNoHit warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstMap</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstMap warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstMedia</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstMedia warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstOverrideKeys</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstOverrideKeys warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstSandbox</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstSandbox warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstSculptedPrim</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstSculptedPrim warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstSit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstSit warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstStreamingMusic</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstStreamingMusic warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstStreamingVideo</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstStreamingVideo warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstTeleport</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstTeleport warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstVoice</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstVoice warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AboutDirectX9</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables AboutDirectX9 warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>BrowserLaunch</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables BrowserLaunch warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>DeedObject</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables DeedObject warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>NewClassified</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables NewClassified warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>QuickTimeInstalled</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables QuickTimeInstalled warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>ReturnToOwner</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables ReturnToOwner warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
<?xml version="1.0" ?>
|
||||
<llsd>
|
||||
<map>
|
||||
<key>FirstAppearance</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstAppearance warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstAttach</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstAttach warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstBalanceDecrease</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstBalanceDecrease warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstBalanceIncrease</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstBalanceIncrease warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstBuild</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstBuild warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstDebugMenus</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstDebugMenus warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstFlexible</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstFlexible warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstGoTo</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstGoTo warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstInventory</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstInventory warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstLeftClickNoHit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstLeftClickNoHit warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstMap</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstMap warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstMedia</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstMedia warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstOverrideKeys</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstOverrideKeys warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstSandbox</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstSandbox warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstSculptedPrim</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstSculptedPrim warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstSit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstSit warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstStreamingMusic</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstStreamingMusic warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstStreamingVideo</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstStreamingVideo warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstTeleport</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstTeleport warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>FirstVoice</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables FirstVoice warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AboutDirectX9</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables AboutDirectX9 warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>BrowserLaunch</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables BrowserLaunch warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>DeedObject</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables DeedObject warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>NewClassified</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables NewClassified warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>QuickTimeInstalled</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables QuickTimeInstalled warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>ReturnToOwner</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables ReturnToOwner warning dialog</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
|
||||
|
||||
This is the format required for NSIS Unicode. See http://www.scratchpaper.com/ for details.
|
||||
|
||||
James Cook
|
||||
September 2008
|
||||
The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE.
|
||||
|
||||
This is the format required for NSIS Unicode. See http://www.scratchpaper.com/ for details.
|
||||
|
||||
James Cook
|
||||
September 2008
|
||||
|
|
|
|||
|
|
@ -162,16 +162,6 @@ std::string ICON_NAME[ICON_NAME_COUNT] =
|
|||
"inv_item_linkfolder.tga"
|
||||
};
|
||||
|
||||
|
||||
// +=================================================+
|
||||
// | LLInventoryPanelObserver |
|
||||
// +=================================================+
|
||||
void LLInventoryPanelObserver::changed(U32 mask)
|
||||
{
|
||||
mIP->modelChanged(mask);
|
||||
}
|
||||
|
||||
|
||||
// +=================================================+
|
||||
// | LLInvFVBridge |
|
||||
// +=================================================+
|
||||
|
|
|
|||
|
|
@ -107,22 +107,6 @@ struct LLAttachmentRezAction
|
|||
S32 mAttachPt;
|
||||
};
|
||||
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLInventoryPanelObserver
|
||||
//
|
||||
// Bridge to support knowing when the inventory has changed.
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
class LLInventoryPanelObserver : public LLInventoryObserver
|
||||
{
|
||||
public:
|
||||
LLInventoryPanelObserver(LLInventoryPanel* ip) : mIP(ip) {}
|
||||
virtual ~LLInventoryPanelObserver() {}
|
||||
virtual void changed(U32 mask);
|
||||
protected:
|
||||
LLInventoryPanel* mIP;
|
||||
};
|
||||
|
||||
const std::string safe_inv_type_lookup(LLInventoryType::EType inv_type);
|
||||
void hide_context_entries(LLMenuGL& menu,
|
||||
const std::vector<std::string> &entries_to_show,
|
||||
|
|
|
|||
|
|
@ -1,136 +1,136 @@
|
|||
/**
|
||||
* @file llinventoryfunctions.h
|
||||
* @brief Miscellaneous inventory-related functions and classes
|
||||
* class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLINVENTORYFUNCTIONS_H
|
||||
#define LL_LLINVENTORYFUNCTIONS_H
|
||||
|
||||
#include "llassetstorage.h"
|
||||
#include "lldarray.h"
|
||||
#include "llfloater.h"
|
||||
#include "llinventory.h"
|
||||
#include "llinventoryfilter.h"
|
||||
#include "llfolderview.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include <set>
|
||||
|
||||
|
||||
class LLFolderViewItem;
|
||||
class LLInventoryFilter;
|
||||
class LLInventoryModel;
|
||||
class LLInventoryPanel;
|
||||
class LLInvFVBridge;
|
||||
class LLInventoryFVBridgeBuilder;
|
||||
class LLMenuBarGL;
|
||||
class LLCheckBoxCtrl;
|
||||
class LLSpinCtrl;
|
||||
class LLScrollContainer;
|
||||
class LLTextBox;
|
||||
class LLIconCtrl;
|
||||
class LLSaveFolderState;
|
||||
class LLFilterEditor;
|
||||
class LLTabContainer;
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
// This is a collection of miscellaneous functions and classes
|
||||
// that don't fit cleanly into any other class header.
|
||||
//
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
class LLInventoryState
|
||||
{
|
||||
public:
|
||||
// HACK: Until we can route this info through the instant message hierarchy
|
||||
static BOOL sWearNewClothing;
|
||||
static LLUUID sWearNewClothingTransactionID; // wear all clothing in this transaction
|
||||
};
|
||||
|
||||
class LLSelectFirstFilteredItem : public LLFolderViewFunctor
|
||||
{
|
||||
public:
|
||||
LLSelectFirstFilteredItem() : mItemSelected(FALSE) {}
|
||||
virtual ~LLSelectFirstFilteredItem() {}
|
||||
virtual void doFolder(LLFolderViewFolder* folder);
|
||||
virtual void doItem(LLFolderViewItem* item);
|
||||
BOOL wasItemSelected() { return mItemSelected; }
|
||||
protected:
|
||||
BOOL mItemSelected;
|
||||
};
|
||||
|
||||
class LLOpenFilteredFolders : public LLFolderViewFunctor
|
||||
{
|
||||
public:
|
||||
LLOpenFilteredFolders() {}
|
||||
virtual ~LLOpenFilteredFolders() {}
|
||||
virtual void doFolder(LLFolderViewFolder* folder);
|
||||
virtual void doItem(LLFolderViewItem* item);
|
||||
};
|
||||
|
||||
class LLSaveFolderState : public LLFolderViewFunctor
|
||||
{
|
||||
public:
|
||||
LLSaveFolderState() : mApply(FALSE) {}
|
||||
virtual ~LLSaveFolderState() {}
|
||||
virtual void doFolder(LLFolderViewFolder* folder);
|
||||
virtual void doItem(LLFolderViewItem* item) {}
|
||||
void setApply(BOOL apply);
|
||||
void clearOpenFolders() { mOpenFolders.clear(); }
|
||||
protected:
|
||||
std::set<LLUUID> mOpenFolders;
|
||||
BOOL mApply;
|
||||
};
|
||||
|
||||
class LLOpenFoldersWithSelection : public LLFolderViewFunctor
|
||||
{
|
||||
public:
|
||||
LLOpenFoldersWithSelection() {}
|
||||
virtual ~LLOpenFoldersWithSelection() {}
|
||||
virtual void doFolder(LLFolderViewFolder* folder);
|
||||
virtual void doItem(LLFolderViewItem* item);
|
||||
};
|
||||
|
||||
const std::string& get_item_icon_name(LLAssetType::EType asset_type,
|
||||
LLInventoryType::EType inventory_type,
|
||||
U32 attachment_point,
|
||||
BOOL item_is_multi );
|
||||
|
||||
LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
|
||||
LLInventoryType::EType inventory_type,
|
||||
U32 attachment_point,
|
||||
BOOL item_is_multi );
|
||||
|
||||
#endif // LL_LLINVENTORYFUNCTIONS_H
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @file llinventoryfunctions.h
|
||||
* @brief Miscellaneous inventory-related functions and classes
|
||||
* class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLINVENTORYFUNCTIONS_H
|
||||
#define LL_LLINVENTORYFUNCTIONS_H
|
||||
|
||||
#include "llassetstorage.h"
|
||||
#include "lldarray.h"
|
||||
#include "llfloater.h"
|
||||
#include "llinventory.h"
|
||||
#include "llinventoryfilter.h"
|
||||
#include "llfolderview.h"
|
||||
#include "llinventorymodel.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include <set>
|
||||
|
||||
|
||||
class LLFolderViewItem;
|
||||
class LLInventoryFilter;
|
||||
class LLInventoryModel;
|
||||
class LLInventoryPanel;
|
||||
class LLInvFVBridge;
|
||||
class LLInventoryFVBridgeBuilder;
|
||||
class LLMenuBarGL;
|
||||
class LLCheckBoxCtrl;
|
||||
class LLSpinCtrl;
|
||||
class LLScrollContainer;
|
||||
class LLTextBox;
|
||||
class LLIconCtrl;
|
||||
class LLSaveFolderState;
|
||||
class LLFilterEditor;
|
||||
class LLTabContainer;
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
//
|
||||
// This is a collection of miscellaneous functions and classes
|
||||
// that don't fit cleanly into any other class header.
|
||||
//
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
class LLInventoryState
|
||||
{
|
||||
public:
|
||||
// HACK: Until we can route this info through the instant message hierarchy
|
||||
static BOOL sWearNewClothing;
|
||||
static LLUUID sWearNewClothingTransactionID; // wear all clothing in this transaction
|
||||
};
|
||||
|
||||
class LLSelectFirstFilteredItem : public LLFolderViewFunctor
|
||||
{
|
||||
public:
|
||||
LLSelectFirstFilteredItem() : mItemSelected(FALSE) {}
|
||||
virtual ~LLSelectFirstFilteredItem() {}
|
||||
virtual void doFolder(LLFolderViewFolder* folder);
|
||||
virtual void doItem(LLFolderViewItem* item);
|
||||
BOOL wasItemSelected() { return mItemSelected; }
|
||||
protected:
|
||||
BOOL mItemSelected;
|
||||
};
|
||||
|
||||
class LLOpenFilteredFolders : public LLFolderViewFunctor
|
||||
{
|
||||
public:
|
||||
LLOpenFilteredFolders() {}
|
||||
virtual ~LLOpenFilteredFolders() {}
|
||||
virtual void doFolder(LLFolderViewFolder* folder);
|
||||
virtual void doItem(LLFolderViewItem* item);
|
||||
};
|
||||
|
||||
class LLSaveFolderState : public LLFolderViewFunctor
|
||||
{
|
||||
public:
|
||||
LLSaveFolderState() : mApply(FALSE) {}
|
||||
virtual ~LLSaveFolderState() {}
|
||||
virtual void doFolder(LLFolderViewFolder* folder);
|
||||
virtual void doItem(LLFolderViewItem* item) {}
|
||||
void setApply(BOOL apply);
|
||||
void clearOpenFolders() { mOpenFolders.clear(); }
|
||||
protected:
|
||||
std::set<LLUUID> mOpenFolders;
|
||||
BOOL mApply;
|
||||
};
|
||||
|
||||
class LLOpenFoldersWithSelection : public LLFolderViewFunctor
|
||||
{
|
||||
public:
|
||||
LLOpenFoldersWithSelection() {}
|
||||
virtual ~LLOpenFoldersWithSelection() {}
|
||||
virtual void doFolder(LLFolderViewFolder* folder);
|
||||
virtual void doItem(LLFolderViewItem* item);
|
||||
};
|
||||
|
||||
const std::string& get_item_icon_name(LLAssetType::EType asset_type,
|
||||
LLInventoryType::EType inventory_type,
|
||||
U32 attachment_point,
|
||||
BOOL item_is_multi );
|
||||
|
||||
LLUIImagePtr get_item_icon(LLAssetType::EType asset_type,
|
||||
LLInventoryType::EType inventory_type,
|
||||
U32 attachment_point,
|
||||
BOOL item_is_multi );
|
||||
|
||||
#endif // LL_LLINVENTORYFUNCTIONS_H
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,6 @@
|
|||
|
||||
#include "llinventorypanel.h"
|
||||
|
||||
// Seraph TODO: Remove unnecessary headers
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llagentwearables.h"
|
||||
#include "llappearancemgr.h"
|
||||
|
|
@ -56,6 +54,22 @@ const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("Recent
|
|||
const std::string LLInventoryPanel::INHERIT_SORT_ORDER = std::string("");
|
||||
static const LLInventoryFVBridgeBuilder INVENTORY_BRIDGE_BUILDER;
|
||||
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLInventoryPanelObserver
|
||||
//
|
||||
// Bridge to support knowing when the inventory has changed.
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
class LLInventoryPanelObserver : public LLInventoryObserver
|
||||
{
|
||||
public:
|
||||
LLInventoryPanelObserver(LLInventoryPanel* ip) : mIP(ip) {}
|
||||
virtual ~LLInventoryPanelObserver() {}
|
||||
virtual void changed(U32 mask);
|
||||
protected:
|
||||
LLInventoryPanel* mIP;
|
||||
};
|
||||
|
||||
LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) :
|
||||
LLPanel(p),
|
||||
mInventoryObserver(NULL),
|
||||
|
|
@ -872,3 +886,11 @@ void example_param_block_usage()
|
|||
|
||||
LLUICtrlFactory::create<LLInventoryPanel>(param_block);
|
||||
}
|
||||
|
||||
// +=================================================+
|
||||
// | LLInventoryPanelObserver |
|
||||
// +=================================================+
|
||||
void LLInventoryPanelObserver::changed(U32 mask)
|
||||
{
|
||||
mIP->modelChanged(mask);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,102 +1,102 @@
|
|||
/**
|
||||
* @file llpanelobjectinventory.h
|
||||
* @brief LLPanelObjectInventory class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELOBJECTINVENTORY_H
|
||||
#define LL_LLPANELOBJECTINVENTORY_H
|
||||
|
||||
#include "llvoinventorylistener.h"
|
||||
#include "llpanel.h"
|
||||
|
||||
#include "llinventory.h"
|
||||
|
||||
class LLScrollContainer;
|
||||
class LLFolderView;
|
||||
class LLFolderViewFolder;
|
||||
class LLViewerObject;
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLPanelObjectInventory
|
||||
//
|
||||
// This class represents the panel used to view and control a
|
||||
// particular task's inventory.
|
||||
//
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener
|
||||
{
|
||||
public:
|
||||
// dummy param block for template registration purposes
|
||||
struct Params : public LLPanel::Params {};
|
||||
|
||||
LLPanelObjectInventory(const Params&);
|
||||
virtual ~LLPanelObjectInventory();
|
||||
|
||||
virtual BOOL postBuild();
|
||||
|
||||
void doToSelected(const LLSD& userdata);
|
||||
|
||||
void refresh();
|
||||
const LLUUID& getTaskUUID() { return mTaskUUID;}
|
||||
void removeSelectedItem();
|
||||
void startRenamingSelectedItem();
|
||||
|
||||
LLFolderView* getRootFolder() const { return mFolders; }
|
||||
|
||||
virtual void draw();
|
||||
virtual void deleteAllChildren();
|
||||
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg);
|
||||
|
||||
static void idle(void* user_data);
|
||||
|
||||
protected:
|
||||
void reset();
|
||||
/*virtual*/ void inventoryChanged(LLViewerObject* object,
|
||||
InventoryObjectList* inventory,
|
||||
S32 serial_num,
|
||||
void* user_data);
|
||||
void updateInventory();
|
||||
void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents);
|
||||
void createViewsForCategory(InventoryObjectList* inventory,
|
||||
LLInventoryObject* parent,
|
||||
LLFolderViewFolder* folder);
|
||||
void clearContents();
|
||||
|
||||
private:
|
||||
LLScrollContainer* mScroller;
|
||||
LLFolderView* mFolders;
|
||||
|
||||
LLUUID mTaskUUID;
|
||||
BOOL mHaveInventory;
|
||||
BOOL mIsInventoryEmpty;
|
||||
BOOL mInventoryNeedsUpdate;
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELOBJECTINVENTORY_H
|
||||
/**
|
||||
* @file llpanelobjectinventory.h
|
||||
* @brief LLPanelObjectInventory class definition
|
||||
*
|
||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPANELOBJECTINVENTORY_H
|
||||
#define LL_LLPANELOBJECTINVENTORY_H
|
||||
|
||||
#include "llvoinventorylistener.h"
|
||||
#include "llpanel.h"
|
||||
|
||||
#include "llinventory.h"
|
||||
|
||||
class LLScrollContainer;
|
||||
class LLFolderView;
|
||||
class LLFolderViewFolder;
|
||||
class LLViewerObject;
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLPanelObjectInventory
|
||||
//
|
||||
// This class represents the panel used to view and control a
|
||||
// particular task's inventory.
|
||||
//
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
class LLPanelObjectInventory : public LLPanel, public LLVOInventoryListener
|
||||
{
|
||||
public:
|
||||
// dummy param block for template registration purposes
|
||||
struct Params : public LLPanel::Params {};
|
||||
|
||||
LLPanelObjectInventory(const Params&);
|
||||
virtual ~LLPanelObjectInventory();
|
||||
|
||||
virtual BOOL postBuild();
|
||||
|
||||
void doToSelected(const LLSD& userdata);
|
||||
|
||||
void refresh();
|
||||
const LLUUID& getTaskUUID() { return mTaskUUID;}
|
||||
void removeSelectedItem();
|
||||
void startRenamingSelectedItem();
|
||||
|
||||
LLFolderView* getRootFolder() const { return mFolders; }
|
||||
|
||||
virtual void draw();
|
||||
virtual void deleteAllChildren();
|
||||
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg);
|
||||
|
||||
static void idle(void* user_data);
|
||||
|
||||
protected:
|
||||
void reset();
|
||||
/*virtual*/ void inventoryChanged(LLViewerObject* object,
|
||||
InventoryObjectList* inventory,
|
||||
S32 serial_num,
|
||||
void* user_data);
|
||||
void updateInventory();
|
||||
void createFolderViews(LLInventoryObject* inventory_root, InventoryObjectList& contents);
|
||||
void createViewsForCategory(InventoryObjectList* inventory,
|
||||
LLInventoryObject* parent,
|
||||
LLFolderViewFolder* folder);
|
||||
void clearContents();
|
||||
|
||||
private:
|
||||
LLScrollContainer* mScroller;
|
||||
LLFolderView* mFolders;
|
||||
|
||||
LLUUID mTaskUUID;
|
||||
BOOL mHaveInventory;
|
||||
BOOL mIsInventoryEmpty;
|
||||
BOOL mInventoryNeedsUpdate;
|
||||
};
|
||||
|
||||
#endif // LL_LLPANELOBJECTINVENTORY_H
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Indlæser...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Indlæser...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Wird geladen...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Wird geladen...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="sl_logo_rotate_black.gif" align="absmiddle"><br/> loading...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="sl_logo_rotate_black.gif" align="absmiddle"><br/> loading...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Cargando...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Cargando...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Chargement...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Chargement...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Betöltés folyamatban...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Betöltés folyamatban...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Attendi...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Attendi...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> ロード中...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> ロード中...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Laden...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Laden...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Ładowanie...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Ładowanie...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Carregando...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Carregando...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Загрузка...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Загрузка...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Yükleniyor...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Yükleniyor...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Завантаж...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> Завантаж...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> 请等待...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
|
||||
<body style="background-color:#000000;font-family:verdana,helvetica,sans-serif;font-size:62.5%;color:#e9f1f8;">
|
||||
<table width="100%" height="100%" border="0">
|
||||
<tr>
|
||||
<td align="center" valign="middle" style="font-size:0.8em;">
|
||||
<img src="../../en-us/loading/sl_logo_rotate_black.gif" align="absmiddle"><br/> 请等待...
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -1,45 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Beboer" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="På prøve" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="æresmedlem" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Linden Lab medarbejder" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Betalende medlem" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Registreret betalende" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Ingen betalingsinfo" />
|
||||
<string name="AgeVerified"
|
||||
value="Alders-checket" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Ikke alders-checket" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=da
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Partner:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Optaget autosvar:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Beboer" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="På prøve" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="æresmedlem" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Linden Lab medarbejder" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Betalende medlem" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Registreret betalende" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Ingen betalingsinfo" />
|
||||
<string name="AgeVerified"
|
||||
value="Alders-checket" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Ikke alders-checket" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=da
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Partner:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Optaget autosvar:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,45 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Residente" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Prueba" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Miembro fundador" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Empleado de Linden Lab" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Ha usado una forma de pago" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Hay infor. de la forma de pago" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Sin infor. de la forma de pago" />
|
||||
<string name="AgeVerified"
|
||||
value="Edad verificada" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Edad no verificada" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=es
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Compañero/a:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Mensaje en el estado ocupado:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Residente" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Prueba" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Miembro fundador" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Empleado de Linden Lab" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Ha usado una forma de pago" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Hay infor. de la forma de pago" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Sin infor. de la forma de pago" />
|
||||
<string name="AgeVerified"
|
||||
value="Edad verificada" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Edad no verificada" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=es
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Compañero/a:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Mensaje en el estado ocupado:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,45 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Residente" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Prova" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Membro privilegiato" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Impiegato della Linden Lab" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Info. di pagamento usate" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Info. di pagamento in archivio" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Nessuna info. di pagamento" />
|
||||
<string name="AgeVerified"
|
||||
value="Età verificata" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Età non verificata" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=it
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Partner:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Risposta agli IM quando sono in 'Occupato':
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Residente" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Prova" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Membro privilegiato" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Impiegato della Linden Lab" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Info. di pagamento usate" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Info. di pagamento in archivio" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Nessuna info. di pagamento" />
|
||||
<string name="AgeVerified"
|
||||
value="Età verificata" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Età non verificata" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=it
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Partner:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Risposta agli IM quando sono in 'Occupato':
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,45 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Inwoner" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Proef" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Charter lid" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Linden Lab werknemer" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Betalingsinformatie gebruikt" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Betalingsinformatie aanwezig" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Geen betalingsinfo aanwezig" />
|
||||
<string name="AgeVerified"
|
||||
value="Leeftijd geverifieerd" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Leeftijd niet geverifieerd" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=nl
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Partner:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Antwoord bij Niet Storen:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Inwoner" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Proef" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Charter lid" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Linden Lab werknemer" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Betalingsinformatie gebruikt" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Betalingsinformatie aanwezig" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Geen betalingsinfo aanwezig" />
|
||||
<string name="AgeVerified"
|
||||
value="Leeftijd geverifieerd" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Leeftijd niet geverifieerd" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=nl
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Partner:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Antwoord bij Niet Storen:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,45 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Rezydent" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Próbne" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Członek-zalożyciel" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Pracownik Linden Lab" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Dane Konta Używane" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Dane Konta Dostępne" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Brak Danych Konta" />
|
||||
<string name="AgeVerified"
|
||||
value="Wiek Zweryfikowany" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Brak Weryfikacji Wieku" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=pl
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Partner:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Pracuś Mówi:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Rezydent" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Próbne" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Członek-zalożyciel" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Pracownik Linden Lab" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Dane Konta Używane" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Dane Konta Dostępne" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Brak Danych Konta" />
|
||||
<string name="AgeVerified"
|
||||
value="Wiek Zweryfikowany" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Brak Weryfikacji Wieku" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=pl
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Partner:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Pracuś Mówi:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,45 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Residente" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Teste" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Estatuto do membro" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Contratado da Linden Lab" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Infor. de pagamento utilizadas" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Infor. de pagamento no arquivo" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Sem infor. de pagamento no arquivo" />
|
||||
<string name="AgeVerified"
|
||||
value="Idade Verificada" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Idade não Verificada" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=pt
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Parceiro:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Resposta no Modo Ocupado:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<panel name="edit_profile_panel">
|
||||
<string name="CaptionTextAcctInfo">
|
||||
[ACCTTYPE] [PAYMENTINFO] [AGEVERIFICATION]
|
||||
</string>
|
||||
<string name="AcctTypeResident"
|
||||
value="Residente" />
|
||||
<string name="AcctTypeTrial"
|
||||
value="Teste" />
|
||||
<string name="AcctTypeCharterMember"
|
||||
value="Estatuto do membro" />
|
||||
<string name="AcctTypeEmployee"
|
||||
value="Contratado da Linden Lab" />
|
||||
<string name="PaymentInfoUsed"
|
||||
value="Infor. de pagamento utilizadas" />
|
||||
<string name="PaymentInfoOnFile"
|
||||
value="Infor. de pagamento no arquivo" />
|
||||
<string name="NoPaymentInfoOnFile"
|
||||
value="Sem infor. de pagamento no arquivo" />
|
||||
<string name="AgeVerified"
|
||||
value="Idade Verificada" />
|
||||
<string name="NotAgeVerified"
|
||||
value="Idade não Verificada" />
|
||||
<string name="partner_edit_link_url">
|
||||
http://www.secondlife.com/account/partners.php?lang=pt
|
||||
</string>
|
||||
<panel name="scroll_content_panel">
|
||||
<panel name="data_panel" >
|
||||
<panel name="lifes_images_panel">
|
||||
<panel name="second_life_image_panel">
|
||||
<text name="second_life_photo_title_text">
|
||||
[SECOND_LIFE]:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
<text name="title_partner_text" value="Parceiro:"/>
|
||||
<panel name="partner_data_panel">
|
||||
<text name="partner_text" value="[FIRST] [LAST]"/>
|
||||
</panel>
|
||||
<text name="text_box3">
|
||||
Resposta no Modo Ocupado:
|
||||
</text>
|
||||
</panel>
|
||||
</panel>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
VSTool is a command line utility to manipulate VisualStudio settings.
|
||||
|
||||
The windows cmake project configuration uses VSTool.exe
|
||||
|
||||
A handy upgrade:
|
||||
figure out how to make cmake build this csharp app
|
||||
- or write the app using script (jscript?!?) so it doesn't need to be built.
|
||||
|
||||
|
||||
VSTool is a command line utility to manipulate VisualStudio settings.
|
||||
|
||||
The windows cmake project configuration uses VSTool.exe
|
||||
|
||||
A handy upgrade:
|
||||
figure out how to make cmake build this csharp app
|
||||
- or write the app using script (jscript?!?) so it doesn't need to be built.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,95 +1,95 @@
|
|||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectType>Local</ProjectType>
|
||||
<ProductVersion>8.0.50727</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{96943E2D-1373-4617-A117-D0F997A94919}</ProjectGuid>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
<AssemblyKeyContainerName>
|
||||
</AssemblyKeyContainerName>
|
||||
<AssemblyName>VSTool</AssemblyName>
|
||||
<AssemblyOriginatorKeyFile>
|
||||
</AssemblyOriginatorKeyFile>
|
||||
<DefaultClientScript>JScript</DefaultClientScript>
|
||||
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
|
||||
<DefaultTargetSchema>IE50</DefaultTargetSchema>
|
||||
<DelaySign>false</DelaySign>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>VSTool</RootNamespace>
|
||||
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
||||
<StartupObject>VSTool.VSToolMain</StartupObject>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>.\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>false</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>full</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>.\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>true</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>none</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System">
|
||||
<Name>System</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Data">
|
||||
<Name>System.Data</Name>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="main.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectType>Local</ProjectType>
|
||||
<ProductVersion>8.0.50727</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{96943E2D-1373-4617-A117-D0F997A94919}</ProjectGuid>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
<AssemblyKeyContainerName>
|
||||
</AssemblyKeyContainerName>
|
||||
<AssemblyName>VSTool</AssemblyName>
|
||||
<AssemblyOriginatorKeyFile>
|
||||
</AssemblyOriginatorKeyFile>
|
||||
<DefaultClientScript>JScript</DefaultClientScript>
|
||||
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
|
||||
<DefaultTargetSchema>IE50</DefaultTargetSchema>
|
||||
<DelaySign>false</DelaySign>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>VSTool</RootNamespace>
|
||||
<RunPostBuildEvent>Always</RunPostBuildEvent>
|
||||
<StartupObject>VSTool.VSToolMain</StartupObject>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<OutputPath>.\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>false</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>full</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>.\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<NoStdLib>false</NoStdLib>
|
||||
<NoWarn>
|
||||
</NoWarn>
|
||||
<Optimize>true</Optimize>
|
||||
<RegisterForComInterop>false</RegisterForComInterop>
|
||||
<RemoveIntegerChecks>false</RemoveIntegerChecks>
|
||||
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DebugType>none</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System">
|
||||
<Name>System</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Data">
|
||||
<Name>System.Data</Name>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="main.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -1,19 +1,19 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSTool", "VSTool.csproj", "{96943E2D-1373-4617-A117-D0F997A94919}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSTool", "VSTool.csproj", "{96943E2D-1373-4617-A117-D0F997A94919}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{96943E2D-1373-4617-A117-D0F997A94919}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue