diff options
author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-04-29 07:43:28 +0300 |
---|---|---|
committer | Andrey Lihatskiy <alihatskiy@productengine.com> | 2024-04-29 07:56:09 +0300 |
commit | 1b68f71348ecf3983b76b40d7940da8377f049b7 (patch) | |
tree | 2974eddaef130a067c26033d60a59fc790365b3d /indra/integration_tests | |
parent | af4ea94efc1999f3b19fd8d643d0331f0b77e265 (diff) |
#824 Process source files in bulk: replace tabs with spaces, convert CRLF to LF, and trim trailing whitespaces as needed
Diffstat (limited to 'indra/integration_tests')
6 files changed, 696 insertions, 696 deletions
diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index f4dba16a94..95102094ae 100644 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -1,4 +1,4 @@ -/** +/** * @file llimage_libtest.cpp * @author Merov Linden * @brief Integration test for the llimage library @@ -6,21 +6,21 @@ * $LicenseInfo:firstyear=2011&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2011, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -47,7 +47,7 @@ // system libraries #include <iostream> -// doc string provided when invoking the program with --help +// doc string provided when invoking the program with --help static const char USAGE[] = "\n" "usage:\tllimage_libtest [options]\n" "\n" @@ -105,541 +105,541 @@ static bool sAllDone = false; // Create an empty formatted image instance of the correct type from the filename LLPointer<LLImageFormatted> create_image(const std::string &filename) { - std::string exten = gDirUtilp->getExtension(filename); - LLPointer<LLImageFormatted> image = LLImageFormatted::createFromExtension(exten); - return image; + std::string exten = gDirUtilp->getExtension(filename); + LLPointer<LLImageFormatted> image = LLImageFormatted::createFromExtension(exten); + return image; } void output_image_stats(LLPointer<LLImageFormatted> image, const std::string &filename) { - // Print out some statistical data on the image - std::cout << "Image stats for : " << filename << ", extension : " << image->getExtension() << std::endl; + // Print out some statistical data on the image + std::cout << "Image stats for : " << filename << ", extension : " << image->getExtension() << std::endl; - std::cout << " with : " << (int)(image->getWidth()) << ", height : " << (int)(image->getHeight()) << std::endl; - std::cout << " comp : " << (int)(image->getComponents()) << ", levels : " << (int)(image->getLevels()) << std::endl; - std::cout << " head : " << (int)(image->calcHeaderSize()) << ", data : " << (int)(image->getDataSize()) << std::endl; + std::cout << " with : " << (int)(image->getWidth()) << ", height : " << (int)(image->getHeight()) << std::endl; + std::cout << " comp : " << (int)(image->getComponents()) << ", levels : " << (int)(image->getLevels()) << std::endl; + std::cout << " head : " << (int)(image->calcHeaderSize()) << ", data : " << (int)(image->getDataSize()) << std::endl; - return; + return; } // Load an image from file and return a raw (decompressed) instance of its data LLPointer<LLImageRaw> load_image(const std::string &src_filename, int discard_level, int* region, int load_size, bool output_stats) { - LLPointer<LLImageFormatted> image = create_image(src_filename); - - // We support partial loading only for j2c images - if (image->getCodec() == IMG_CODEC_J2C) - { - // Load the header - if (!image->load(src_filename, 600)) - { - return NULL; - } - S32 h = ((LLImageJ2C*)(image.get()))->calcHeaderSize(); - S32 d = (load_size > 0 ? ((LLImageJ2C*)(image.get()))->calcDiscardLevelBytes(load_size) : 0); - S8 r = ((LLImageJ2C*)(image.get()))->getRawDiscardLevel(); - std::cout << "Merov debug : header = " << h << ", load_size = " << load_size << ", discard level = " << d << ", raw discard level = " << r << std::endl; - for (d = 0; d < MAX_DISCARD_LEVEL; d++) - { - S32 data_size = ((LLImageJ2C*)(image.get()))->calcDataSize(d); - std::cout << "Merov debug : discard_level = " << d << ", data_size = " << data_size << std::endl; - } - if (load_size < 0) - { - load_size = (discard_level != -1 ? ((LLImageJ2C*)(image.get()))->calcDataSize(discard_level) : 0); - } - // Load the requested byte range - if (!image->load(src_filename, load_size)) - { - return NULL; - } - } - else - { - // This just loads the image file stream into a buffer. No decoding done. - if (!image->load(src_filename)) - { - return NULL; - } - } - - if( (image->getComponents() != 3) && (image->getComponents() != 4) ) - { - std::cout << "Image files with less than 3 or more than 4 components are not supported\n"; - return NULL; - } - - if (output_stats) - { - output_image_stats(image, src_filename); - } - - LLPointer<LLImageRaw> raw_image = new LLImageRaw; - - // Set the image restriction on load in the case of a j2c image - if ((image->getCodec() == IMG_CODEC_J2C) && ((discard_level != -1) || (region != NULL))) - { - // That method doesn't exist (and likely, doesn't make sense) for any other image file format - // hence the required cryptic cast. - ((LLImageJ2C*)(image.get()))->initDecode(*raw_image, discard_level, region); - } - - if (!image->decode(raw_image, 0.0f)) - { - return NULL; - } - - return raw_image; + LLPointer<LLImageFormatted> image = create_image(src_filename); + + // We support partial loading only for j2c images + if (image->getCodec() == IMG_CODEC_J2C) + { + // Load the header + if (!image->load(src_filename, 600)) + { + return NULL; + } + S32 h = ((LLImageJ2C*)(image.get()))->calcHeaderSize(); + S32 d = (load_size > 0 ? ((LLImageJ2C*)(image.get()))->calcDiscardLevelBytes(load_size) : 0); + S8 r = ((LLImageJ2C*)(image.get()))->getRawDiscardLevel(); + std::cout << "Merov debug : header = " << h << ", load_size = " << load_size << ", discard level = " << d << ", raw discard level = " << r << std::endl; + for (d = 0; d < MAX_DISCARD_LEVEL; d++) + { + S32 data_size = ((LLImageJ2C*)(image.get()))->calcDataSize(d); + std::cout << "Merov debug : discard_level = " << d << ", data_size = " << data_size << std::endl; + } + if (load_size < 0) + { + load_size = (discard_level != -1 ? ((LLImageJ2C*)(image.get()))->calcDataSize(discard_level) : 0); + } + // Load the requested byte range + if (!image->load(src_filename, load_size)) + { + return NULL; + } + } + else + { + // This just loads the image file stream into a buffer. No decoding done. + if (!image->load(src_filename)) + { + return NULL; + } + } + + if( (image->getComponents() != 3) && (image->getComponents() != 4) ) + { + std::cout << "Image files with less than 3 or more than 4 components are not supported\n"; + return NULL; + } + + if (output_stats) + { + output_image_stats(image, src_filename); + } + + LLPointer<LLImageRaw> raw_image = new LLImageRaw; + + // Set the image restriction on load in the case of a j2c image + if ((image->getCodec() == IMG_CODEC_J2C) && ((discard_level != -1) || (region != NULL))) + { + // That method doesn't exist (and likely, doesn't make sense) for any other image file format + // hence the required cryptic cast. + ((LLImageJ2C*)(image.get()))->initDecode(*raw_image, discard_level, region); + } + + if (!image->decode(raw_image, 0.0f)) + { + return NULL; + } + + return raw_image; } // Save a raw image instance into a file bool save_image(const std::string &dest_filename, LLPointer<LLImageRaw> raw_image, int blocks_size, int precincts_size, int levels, bool reversible, bool output_stats) { - LLPointer<LLImageFormatted> image = create_image(dest_filename); - - // Set the image codestream parameters on output in the case of a j2c image - if (image->getCodec() == IMG_CODEC_J2C) - { - // That method doesn't exist (and likely, doesn't make sense) for any other image file format - // hence the required cryptic cast. - if ((blocks_size != -1) || (precincts_size != -1) || (levels != 0)) - { - ((LLImageJ2C*)(image.get()))->initEncode(*raw_image, blocks_size, precincts_size, levels); - } - ((LLImageJ2C*)(image.get()))->setReversible(reversible); - } - - if (!image->encode(raw_image, 0.0f)) - { - return false; - } - - if (output_stats) - { - output_image_stats(image, dest_filename); - } - - return image->save(dest_filename); + LLPointer<LLImageFormatted> image = create_image(dest_filename); + + // Set the image codestream parameters on output in the case of a j2c image + if (image->getCodec() == IMG_CODEC_J2C) + { + // That method doesn't exist (and likely, doesn't make sense) for any other image file format + // hence the required cryptic cast. + if ((blocks_size != -1) || (precincts_size != -1) || (levels != 0)) + { + ((LLImageJ2C*)(image.get()))->initEncode(*raw_image, blocks_size, precincts_size, levels); + } + ((LLImageJ2C*)(image.get()))->setReversible(reversible); + } + + if (!image->encode(raw_image, 0.0f)) + { + return false; + } + + if (output_stats) + { + output_image_stats(image, dest_filename); + } + + return image->save(dest_filename); } void store_input_file(std::list<std::string> &input_filenames, const std::string &path) { - // Break the incoming path in its components - std::string dir = gDirUtilp->getDirName(path); - std::string name = gDirUtilp->getBaseFileName(path); - std::string exten = gDirUtilp->getExtension(path); - - // std::cout << "store_input_file : " << path << ", dir : " << dir << ", name : " << name << ", exten : " << exten << std::endl; - - // If extension is not an image type or "*", exit - // Note: we don't support complex patterns for the extension like "j??" - // Note: on most shells, the pattern expansion is done by the shell so that pattern matching limitation is actually not a problem - if ((exten.compare("*") != 0) && (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID)) - { - return; - } - - if ((name.find('*') != -1) || ((name.find('?') != -1))) - { - // If file name is a pattern, iterate to get each file name and store - std::string next_name; - LLDirIterator iter(dir, name); - while (iter.next(next_name)) - { - std::string file_name = gDirUtilp->add(dir, next_name); - input_filenames.push_back(file_name); - } - } - else - { - // Verify that the file does exist before storing - if (gDirUtilp->fileExists(path)) - { - input_filenames.push_back(path); - } - else - { - std::cout << "store_input_file : the file " << path << " could not be found" << std::endl; - } - } + // Break the incoming path in its components + std::string dir = gDirUtilp->getDirName(path); + std::string name = gDirUtilp->getBaseFileName(path); + std::string exten = gDirUtilp->getExtension(path); + + // std::cout << "store_input_file : " << path << ", dir : " << dir << ", name : " << name << ", exten : " << exten << std::endl; + + // If extension is not an image type or "*", exit + // Note: we don't support complex patterns for the extension like "j??" + // Note: on most shells, the pattern expansion is done by the shell so that pattern matching limitation is actually not a problem + if ((exten.compare("*") != 0) && (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID)) + { + return; + } + + if ((name.find('*') != -1) || ((name.find('?') != -1))) + { + // If file name is a pattern, iterate to get each file name and store + std::string next_name; + LLDirIterator iter(dir, name); + while (iter.next(next_name)) + { + std::string file_name = gDirUtilp->add(dir, next_name); + input_filenames.push_back(file_name); + } + } + else + { + // Verify that the file does exist before storing + if (gDirUtilp->fileExists(path)) + { + input_filenames.push_back(path); + } + else + { + std::cout << "store_input_file : the file " << path << " could not be found" << std::endl; + } + } } void store_output_file(std::list<std::string> &output_filenames, std::list<std::string> &input_filenames, const std::string &path) { - // Break the incoming path in its components - std::string dir = gDirUtilp->getDirName(path); - std::string name = gDirUtilp->getBaseFileName(path); - std::string exten = gDirUtilp->getExtension(path); - - // std::cout << "store_output_file : " << path << ", dir : " << dir << ", name : " << name << ", exten : " << exten << std::endl; - - if (dir.empty() && exten.empty()) - { - // If dir and exten are empty, we interpret the name as a file extension type name and will iterate through input list to populate the output list - exten = name; - // Make sure the extension is an image type - if (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID) - { - return; - } - std::string delim = gDirUtilp->getDirDelimiter(); - std::list<std::string>::iterator in_file = input_filenames.begin(); - std::list<std::string>::iterator end = input_filenames.end(); - for (; in_file != end; ++in_file) - { - dir = gDirUtilp->getDirName(*in_file); - name = gDirUtilp->getBaseFileName(*in_file,true); - std::string file_name; - if (!dir.empty()) - { - file_name = dir + delim + name + "." + exten; - } - else - { - file_name = name + "." + exten; - } - output_filenames.push_back(file_name); - } - } - else - { - // Make sure the extension is an image type - if (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID) - { - return; - } - // Store the path - output_filenames.push_back(path); - } + // Break the incoming path in its components + std::string dir = gDirUtilp->getDirName(path); + std::string name = gDirUtilp->getBaseFileName(path); + std::string exten = gDirUtilp->getExtension(path); + + // std::cout << "store_output_file : " << path << ", dir : " << dir << ", name : " << name << ", exten : " << exten << std::endl; + + if (dir.empty() && exten.empty()) + { + // If dir and exten are empty, we interpret the name as a file extension type name and will iterate through input list to populate the output list + exten = name; + // Make sure the extension is an image type + if (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID) + { + return; + } + std::string delim = gDirUtilp->getDirDelimiter(); + std::list<std::string>::iterator in_file = input_filenames.begin(); + std::list<std::string>::iterator end = input_filenames.end(); + for (; in_file != end; ++in_file) + { + dir = gDirUtilp->getDirName(*in_file); + name = gDirUtilp->getBaseFileName(*in_file,true); + std::string file_name; + if (!dir.empty()) + { + file_name = dir + delim + name + "." + exten; + } + else + { + file_name = name + "." + exten; + } + output_filenames.push_back(file_name); + } + } + else + { + // Make sure the extension is an image type + if (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID) + { + return; + } + // Store the path + output_filenames.push_back(path); + } } // Holds the metric gathering output in a thread safe way class LogThread : public LLThread { public: - std::string mFile; - - LogThread(std::string& test_name) : LLThread("llimage_libtest log") - { - std::string file_name = test_name + std::string(".slp"); - mFile = file_name; - } - - void run() - { - std::ofstream os(mFile.c_str()); - - while (!sAllDone) - { - LLFastTimer::writeLog(os); - os.flush(); - ms_sleep(32); - } - LLFastTimer::writeLog(os); - os.flush(); - os.close(); - } + std::string mFile; + + LogThread(std::string& test_name) : LLThread("llimage_libtest log") + { + std::string file_name = test_name + std::string(".slp"); + mFile = file_name; + } + + void run() + { + std::ofstream os(mFile.c_str()); + + while (!sAllDone) + { + LLFastTimer::writeLog(os); + os.flush(); + ms_sleep(32); + } + LLFastTimer::writeLog(os); + os.flush(); + os.close(); + } }; int main(int argc, char** argv) { - // List of input and output files - std::list<std::string> input_filenames; - std::list<std::string> output_filenames; - // Other optional parsed arguments - bool analyze_performance = false; - bool image_stats = false; - int* region = NULL; - int discard_level = -1; - int load_size = 0; - int precincts_size = -1; - int blocks_size = -1; - int levels = 0; - bool reversible = false; + // List of input and output files + std::list<std::string> input_filenames; + std::list<std::string> output_filenames; + // Other optional parsed arguments + bool analyze_performance = false; + bool image_stats = false; + int* region = NULL; + int discard_level = -1; + int load_size = 0; + int precincts_size = -1; + int blocks_size = -1; + int levels = 0; + bool reversible = false; std::string filter_name = ""; - // Init whatever is necessary - ll_init_apr(); - LLImage::initClass(); - LogThread* fast_timer_log_thread = NULL; // For performance and metric gathering + // Init whatever is necessary + ll_init_apr(); + LLImage::initClass(); + LogThread* fast_timer_log_thread = NULL; // For performance and metric gathering - // Analyze command line arguments - for (int arg = 1; arg < argc; ++arg) - { - if (!strcmp(argv[arg], "--help") || !strcmp(argv[arg], "-h")) - { + // Analyze command line arguments + for (int arg = 1; arg < argc; ++arg) + { + if (!strcmp(argv[arg], "--help") || !strcmp(argv[arg], "-h")) + { // Send the usage to standard out std::cout << USAGE << std::endl; - return 0; - } - else if ((!strcmp(argv[arg], "--input") || !strcmp(argv[arg], "-i")) && arg < argc-1) - { - std::string file_name = argv[arg+1]; - while (file_name[0] != '-') // if arg starts with '-', we consider it's not a file name but some other argument - { - // std::cout << "input file name : " << file_name << std::endl; - store_input_file(input_filenames, file_name); - arg += 1; // Skip that arg now we know it's a file name - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; - file_name = argv[arg+1]; // Next argument and loop over - } - } - else if ((!strcmp(argv[arg], "--output") || !strcmp(argv[arg], "-o")) && arg < argc-1) - { - std::string file_name = argv[arg+1]; - while (file_name[0] != '-') // if arg starts with '-', we consider it's not a file name but some other argument - { - // std::cout << "output file name : " << file_name << std::endl; - store_output_file(output_filenames, input_filenames, file_name); - arg += 1; // Skip that arg now we know it's a file name - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; - file_name = argv[arg+1]; // Next argument and loop over - } - } - else if ((!strcmp(argv[arg], "--region") || !strcmp(argv[arg], "-r")) && arg < argc-1) - { - std::string value_str = argv[arg+1]; - int index = 0; - region = new int[4]; - while (value_str[0] != '-') // if arg starts with '-', it's the next option - { - int value = atoi(value_str.c_str()); - region[index++] = value; - arg += 1; // Definitely skip that arg now we know it's a number - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; - if (index == 4) // Break out of the loop if we captured 4 values already - break; - value_str = argv[arg+1]; // Next argument and loop over - } - if (index != 4) - { - std::cout << "--region arguments invalid" << std::endl; - delete [] region; - region = NULL; - } - } - else if (!strcmp(argv[arg], "--discard_level") || !strcmp(argv[arg], "-d")) - { - std::string value_str; - if ((arg + 1) < argc) - { - value_str = argv[arg+1]; - } - if (((arg + 1) >= argc) || (value_str[0] == '-')) - { - std::cout << "No valid --discard_level argument given, discard_level ignored" << std::endl; - } - else - { - discard_level = atoi(value_str.c_str()); - // Clamp to the values accepted by the viewer - discard_level = llclamp(discard_level,0,5); - } - } - else if (!strcmp(argv[arg], "--load_size") || !strcmp(argv[arg], "-load")) - { - std::string value_str; - if ((arg + 1) < argc) - { - value_str = argv[arg+1]; - } - if (((arg + 1) >= argc) || (value_str[0] == '-')) - { - std::cout << "No valid --load_size argument given, load_size ignored" << std::endl; - } - else - { - load_size = atoi(value_str.c_str()); - } - } - else if (!strcmp(argv[arg], "--precincts") || !strcmp(argv[arg], "-p")) - { - std::string value_str; - if ((arg + 1) < argc) - { - value_str = argv[arg+1]; - } - if (((arg + 1) >= argc) || (value_str[0] == '-')) - { - std::cout << "No valid --precincts argument given, precincts ignored" << std::endl; - } - else - { - precincts_size = atoi(value_str.c_str()); - } - } - else if (!strcmp(argv[arg], "--blocks") || !strcmp(argv[arg], "-b")) - { - std::string value_str; - if ((arg + 1) < argc) - { - value_str = argv[arg+1]; - } - if (((arg + 1) >= argc) || (value_str[0] == '-')) - { - std::cout << "No valid --blocks argument given, blocks ignored" << std::endl; - } - else - { - blocks_size = atoi(value_str.c_str()); - } - } - else if (!strcmp(argv[arg], "--levels") || !strcmp(argv[arg], "-l")) - { - std::string value_str; - if ((arg + 1) < argc) - { - value_str = argv[arg+1]; - } - if (((arg + 1) >= argc) || (value_str[0] == '-')) - { - std::cout << "No valid --levels argument given, default (5) will be used" << std::endl; - } - else - { - levels = atoi(value_str.c_str()); - } - } - else if (!strcmp(argv[arg], "--reversible") || !strcmp(argv[arg], "-rev")) - { - reversible = true; - } - else if (!strcmp(argv[arg], "--logmetrics") || !strcmp(argv[arg], "-log")) - { - // '--logmetrics' needs to be specified with a named test metric argument - // Note: for the moment, only ImageCompressionTester has been tested - std::string test_name; - if ((arg + 1) < argc) - { - test_name = argv[arg+1]; - } - if (((arg + 1) >= argc) || (test_name[0] == '-')) - { - // We don't have an argument left in the arg list or the next argument is another option - std::cout << "No --logmetrics argument given, no perf data will be gathered" << std::endl; - } - else - { - LLFastTimer::sMetricLog = TRUE; - LLFastTimer::sLogName = test_name; - arg += 1; // Skip that arg now we know it's a valid test name - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; - } - } - else if (!strcmp(argv[arg], "--filter") || !strcmp(argv[arg], "-f")) - { - // '--filter' needs to be specified with a named filter argument - if ((arg + 1) < argc) - { - filter_name = argv[arg+1]; - } - if (((arg + 1) >= argc) || (filter_name[0] == '-')) - { - // We don't have an argument left in the arg list or the next argument is another option - std::cout << "No --filter argument given, no filter will be applied" << std::endl; - } - else - { - arg += 1; // Skip that arg now we know it's a valid test name - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; + return 0; + } + else if ((!strcmp(argv[arg], "--input") || !strcmp(argv[arg], "-i")) && arg < argc-1) + { + std::string file_name = argv[arg+1]; + while (file_name[0] != '-') // if arg starts with '-', we consider it's not a file name but some other argument + { + // std::cout << "input file name : " << file_name << std::endl; + store_input_file(input_filenames, file_name); + arg += 1; // Skip that arg now we know it's a file name + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + file_name = argv[arg+1]; // Next argument and loop over + } + } + else if ((!strcmp(argv[arg], "--output") || !strcmp(argv[arg], "-o")) && arg < argc-1) + { + std::string file_name = argv[arg+1]; + while (file_name[0] != '-') // if arg starts with '-', we consider it's not a file name but some other argument + { + // std::cout << "output file name : " << file_name << std::endl; + store_output_file(output_filenames, input_filenames, file_name); + arg += 1; // Skip that arg now we know it's a file name + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + file_name = argv[arg+1]; // Next argument and loop over + } + } + else if ((!strcmp(argv[arg], "--region") || !strcmp(argv[arg], "-r")) && arg < argc-1) + { + std::string value_str = argv[arg+1]; + int index = 0; + region = new int[4]; + while (value_str[0] != '-') // if arg starts with '-', it's the next option + { + int value = atoi(value_str.c_str()); + region[index++] = value; + arg += 1; // Definitely skip that arg now we know it's a number + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + if (index == 4) // Break out of the loop if we captured 4 values already + break; + value_str = argv[arg+1]; // Next argument and loop over + } + if (index != 4) + { + std::cout << "--region arguments invalid" << std::endl; + delete [] region; + region = NULL; + } + } + else if (!strcmp(argv[arg], "--discard_level") || !strcmp(argv[arg], "-d")) + { + std::string value_str; + if ((arg + 1) < argc) + { + value_str = argv[arg+1]; + } + if (((arg + 1) >= argc) || (value_str[0] == '-')) + { + std::cout << "No valid --discard_level argument given, discard_level ignored" << std::endl; + } + else + { + discard_level = atoi(value_str.c_str()); + // Clamp to the values accepted by the viewer + discard_level = llclamp(discard_level,0,5); } - } + } + else if (!strcmp(argv[arg], "--load_size") || !strcmp(argv[arg], "-load")) + { + std::string value_str; + if ((arg + 1) < argc) + { + value_str = argv[arg+1]; + } + if (((arg + 1) >= argc) || (value_str[0] == '-')) + { + std::cout << "No valid --load_size argument given, load_size ignored" << std::endl; + } + else + { + load_size = atoi(value_str.c_str()); + } + } + else if (!strcmp(argv[arg], "--precincts") || !strcmp(argv[arg], "-p")) + { + std::string value_str; + if ((arg + 1) < argc) + { + value_str = argv[arg+1]; + } + if (((arg + 1) >= argc) || (value_str[0] == '-')) + { + std::cout << "No valid --precincts argument given, precincts ignored" << std::endl; + } + else + { + precincts_size = atoi(value_str.c_str()); + } + } + else if (!strcmp(argv[arg], "--blocks") || !strcmp(argv[arg], "-b")) + { + std::string value_str; + if ((arg + 1) < argc) + { + value_str = argv[arg+1]; + } + if (((arg + 1) >= argc) || (value_str[0] == '-')) + { + std::cout << "No valid --blocks argument given, blocks ignored" << std::endl; + } + else + { + blocks_size = atoi(value_str.c_str()); + } + } + else if (!strcmp(argv[arg], "--levels") || !strcmp(argv[arg], "-l")) + { + std::string value_str; + if ((arg + 1) < argc) + { + value_str = argv[arg+1]; + } + if (((arg + 1) >= argc) || (value_str[0] == '-')) + { + std::cout << "No valid --levels argument given, default (5) will be used" << std::endl; + } + else + { + levels = atoi(value_str.c_str()); + } + } + else if (!strcmp(argv[arg], "--reversible") || !strcmp(argv[arg], "-rev")) + { + reversible = true; + } + else if (!strcmp(argv[arg], "--logmetrics") || !strcmp(argv[arg], "-log")) + { + // '--logmetrics' needs to be specified with a named test metric argument + // Note: for the moment, only ImageCompressionTester has been tested + std::string test_name; + if ((arg + 1) < argc) + { + test_name = argv[arg+1]; + } + if (((arg + 1) >= argc) || (test_name[0] == '-')) + { + // We don't have an argument left in the arg list or the next argument is another option + std::cout << "No --logmetrics argument given, no perf data will be gathered" << std::endl; + } + else + { + LLFastTimer::sMetricLog = TRUE; + LLFastTimer::sLogName = test_name; + arg += 1; // Skip that arg now we know it's a valid test name + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + } + } + else if (!strcmp(argv[arg], "--filter") || !strcmp(argv[arg], "-f")) + { + // '--filter' needs to be specified with a named filter argument + if ((arg + 1) < argc) + { + filter_name = argv[arg+1]; + } + if (((arg + 1) >= argc) || (filter_name[0] == '-')) + { + // We don't have an argument left in the arg list or the next argument is another option + std::cout << "No --filter argument given, no filter will be applied" << std::endl; + } + else + { + arg += 1; // Skip that arg now we know it's a valid test name + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + } + } else if (!strcmp(argv[arg], "--analyzeperformance") || !strcmp(argv[arg], "-a")) - { - analyze_performance = true; - } - else if (!strcmp(argv[arg], "--image-stats") || !strcmp(argv[arg], "-s")) - { - image_stats = true; - } - } - - // Check arguments consistency. Exit with proper message if inconsistent. - if (input_filenames.size() == 0) - { - std::cout << "No input file, nothing to do -> exit" << std::endl; - return 0; - } - if (analyze_performance && !LLFastTimer::sMetricLog) - { - std::cout << "Cannot create perf report if no perf gathered (i.e. use argument -log <perf> with -a) -> exit" << std::endl; - return 0; - } - - - // Create the logging thread if required - if (LLFastTimer::sMetricLog) - { - LLFastTimer::sLogLock = new LLMutex(NULL); - fast_timer_log_thread = new LogThread(LLFastTimer::sLogName); - fast_timer_log_thread->start(); - } - + { + analyze_performance = true; + } + else if (!strcmp(argv[arg], "--image-stats") || !strcmp(argv[arg], "-s")) + { + image_stats = true; + } + } + + // Check arguments consistency. Exit with proper message if inconsistent. + if (input_filenames.size() == 0) + { + std::cout << "No input file, nothing to do -> exit" << std::endl; + return 0; + } + if (analyze_performance && !LLFastTimer::sMetricLog) + { + std::cout << "Cannot create perf report if no perf gathered (i.e. use argument -log <perf> with -a) -> exit" << std::endl; + return 0; + } + + + // Create the logging thread if required + if (LLFastTimer::sMetricLog) + { + LLFastTimer::sLogLock = new LLMutex(NULL); + fast_timer_log_thread = new LogThread(LLFastTimer::sLogName); + fast_timer_log_thread->start(); + } + // Load the filter once and for all LLImageFilter filter(filter_name); - // Perform action on each input file - std::list<std::string>::iterator in_file = input_filenames.begin(); - std::list<std::string>::iterator out_file = output_filenames.begin(); - std::list<std::string>::iterator in_end = input_filenames.end(); - std::list<std::string>::iterator out_end = output_filenames.end(); - for (; in_file != in_end; ++in_file, ++out_file) - { - // Load file - LLPointer<LLImageRaw> raw_image = load_image(*in_file, discard_level, region, load_size, image_stats); - if (!raw_image) - { - std::cout << "Error: Image " << *in_file << " could not be loaded" << std::endl; - continue; - } - + // Perform action on each input file + std::list<std::string>::iterator in_file = input_filenames.begin(); + std::list<std::string>::iterator out_file = output_filenames.begin(); + std::list<std::string>::iterator in_end = input_filenames.end(); + std::list<std::string>::iterator out_end = output_filenames.end(); + for (; in_file != in_end; ++in_file, ++out_file) + { + // Load file + LLPointer<LLImageRaw> raw_image = load_image(*in_file, discard_level, region, load_size, image_stats); + if (!raw_image) + { + std::cout << "Error: Image " << *in_file << " could not be loaded" << std::endl; + continue; + } + // Apply the filter filter.executeFilter(raw_image); - // Save file - if (out_file != out_end) - { - if (!save_image(*out_file, raw_image, blocks_size, precincts_size, levels, reversible, image_stats)) - { - std::cout << "Error: Image " << *out_file << " could not be saved" << std::endl; - } - else - { - std::cout << *in_file << " -> " << *out_file << std::endl; - } - } - } - - // Output perf data if requested by user - if (analyze_performance) - { - std::string baseline_name = LLFastTimer::sLogName + "_baseline.slp"; - std::string current_name = LLFastTimer::sLogName + ".slp"; - std::string report_name = LLFastTimer::sLogName + "_report.csv"; - - std::cout << "Analyzing performance, check report in : " << report_name << std::endl; - - LLMetricPerformanceTesterBasic::doAnalysisMetrics(baseline_name, current_name, report_name); - } - - // Stop the perf gathering system if needed - if (LLFastTimer::sMetricLog) - { - LLMetricPerformanceTesterBasic::deleteTester(LLFastTimer::sLogName); - sAllDone = true; - } - - // Cleanup and exit - SUBSYSTEM_CLEANUP(LLImage); - if (fast_timer_log_thread) - { - fast_timer_log_thread->shutdown(); - } - - return 0; + // Save file + if (out_file != out_end) + { + if (!save_image(*out_file, raw_image, blocks_size, precincts_size, levels, reversible, image_stats)) + { + std::cout << "Error: Image " << *out_file << " could not be saved" << std::endl; + } + else + { + std::cout << *in_file << " -> " << *out_file << std::endl; + } + } + } + + // Output perf data if requested by user + if (analyze_performance) + { + std::string baseline_name = LLFastTimer::sLogName + "_baseline.slp"; + std::string current_name = LLFastTimer::sLogName + ".slp"; + std::string report_name = LLFastTimer::sLogName + "_report.csv"; + + std::cout << "Analyzing performance, check report in : " << report_name << std::endl; + + LLMetricPerformanceTesterBasic::doAnalysisMetrics(baseline_name, current_name, report_name); + } + + // Stop the perf gathering system if needed + if (LLFastTimer::sMetricLog) + { + LLMetricPerformanceTesterBasic::deleteTester(LLFastTimer::sLogName); + sAllDone = true; + } + + // Cleanup and exit + SUBSYSTEM_CLEANUP(LLImage); + if (fast_timer_log_thread) + { + fast_timer_log_thread->shutdown(); + } + + return 0; } diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.h b/indra/integration_tests/llimage_libtest/llimage_libtest.h index 63f3d46b50..75fd5a50ae 100644 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.h +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.h @@ -1,24 +1,24 @@ -/** +/** * @file llimage_libtest.h * * $LicenseInfo:firstyear=2011&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2011, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/integration_tests/llui_libtest/llui_libtest.cpp b/indra/integration_tests/llui_libtest/llui_libtest.cpp index a0418f09d5..efb9c47a91 100644 --- a/indra/integration_tests/llui_libtest/llui_libtest.cpp +++ b/indra/integration_tests/llui_libtest/llui_libtest.cpp @@ -1,25 +1,25 @@ -/** +/** * @file llui_libtest.cpp * @brief Integration test for the LLUI library * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -31,7 +31,7 @@ #include "llwidgetreg.h" // linden library includes -#include "llcontrol.h" // LLControlGroup +#include "llcontrol.h" // LLControlGroup #include "lldir.h" #include "lldiriterator.h" #include "llerrorcontrol.h" @@ -48,29 +48,29 @@ // *TODO: teach Parabuild about this program, run automatically after full builds // I believe these must be globals, not stack variables. JC -LLControlGroup gSavedSettings("Global"); // saved at end of session +LLControlGroup gSavedSettings("Global"); // saved at end of session LLControlGroup gSavedPerAccountSettings("PerAccount"); // saved at end of session LLControlGroup gWarningSettings("Warnings"); // persists ignored dialogs/warnings -// We can't create LLImageGL objects because we have no window or rendering +// We can't create LLImageGL objects because we have no window or rendering // context. Provide enough of an LLUIImage to test the LLUI library without // an underlying image. class TestUIImage : public LLUIImage { public: - TestUIImage() - : LLUIImage( std::string(), NULL ) // NULL ImageGL, don't deref! - { } - - /*virtual*/ S32 getWidth() const - { - return 16; - } - - /*virtual*/ S32 getHeight() const - { - return 16; - } + TestUIImage() + : LLUIImage( std::string(), NULL ) // NULL ImageGL, don't deref! + { } + + /*virtual*/ S32 getWidth() const + { + return 16; + } + + /*virtual*/ S32 getHeight() const + { + return 16; + } }; @@ -79,138 +79,138 @@ class LLTexture ; class TestImageProvider : public LLImageProviderInterface { public: - /*virtual*/ LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority) - { - return makeImage(); - } - - /*virtual*/ LLPointer<LLUIImage> getUIImageByID(const LLUUID& id, S32 priority) - { - return makeImage(); - } - - /*virtual*/ void cleanUp() - { - } - - LLPointer<LLUIImage> makeImage() - { - LLPointer<LLTexture> image_gl; - LLPointer<LLUIImage> image = new TestUIImage(); //LLUIImage( std::string(), image_gl); - mImageList.push_back(image); - return image; - } - + /*virtual*/ LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority) + { + return makeImage(); + } + + /*virtual*/ LLPointer<LLUIImage> getUIImageByID(const LLUUID& id, S32 priority) + { + return makeImage(); + } + + /*virtual*/ void cleanUp() + { + } + + LLPointer<LLUIImage> makeImage() + { + LLPointer<LLTexture> image_gl; + LLPointer<LLUIImage> image = new TestUIImage(); //LLUIImage( std::string(), image_gl); + mImageList.push_back(image); + return image; + } + public: - // Unclear if we need this, hold on to one copy of each image we make - std::vector<LLPointer<LLUIImage> > mImageList; + // Unclear if we need this, hold on to one copy of each image we make + std::vector<LLPointer<LLUIImage> > mImageList; }; TestImageProvider gTestImageProvider; void init_llui() { - // Font lookup needs directory support + // Font lookup needs directory support #if LL_DARWIN - const char* newview_path = "../../../../newview"; + const char* newview_path = "../../../../newview"; #else - const char* newview_path = "../../../newview"; + const char* newview_path = "../../../newview"; #endif - gDirUtilp->initAppDirs("SecondLife", newview_path); - gDirUtilp->setSkinFolder("default", "en"); - - // colors are no longer stored in a LLControlGroup file - LLUIColorTable::instance().loadFromSettings(); - - std::string config_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings.xml"); - gSavedSettings.loadFromFile(config_filename); - - // See LLAppViewer::init() - LLUI::settings_map_t settings; - settings["config"] = &gSavedSettings; - settings["ignores"] = &gWarningSettings; - settings["floater"] = &gSavedSettings; - settings["account"] = &gSavedPerAccountSettings; - - // Don't use real images as we don't have a GL context - LLUI::initClass(settings, &gTestImageProvider); - - const bool no_register_widgets = false; - LLWidgetReg::initClass( no_register_widgets ); - - // Otherwise we get translation warnings when setting up floaters - // (tooltips for buttons) - std::set<std::string> default_args; - LLTransUtil::parseStrings("strings.xml", default_args); - LLTransUtil::parseLanguageStrings("language_settings.xml"); - LLFontManager::initClass(); - - // Creating widgets apparently requires fonts to be initialized, - // otherwise it crashes. - LLFontGL::initClass(96.f, 1.f, 1.f, - gDirUtilp->getAppRODataDir(), - false ); // don't create gl textures - - LLFloaterView::Params fvparams; - fvparams.name("Floater View"); - fvparams.rect( LLRect(0,480,640,0) ); - fvparams.mouse_opaque(false); - fvparams.follows.flags(FOLLOWS_ALL); - fvparams.tab_stop(false); - gFloaterView = LLUICtrlFactory::create<LLFloaterView> (fvparams); + gDirUtilp->initAppDirs("SecondLife", newview_path); + gDirUtilp->setSkinFolder("default", "en"); + + // colors are no longer stored in a LLControlGroup file + LLUIColorTable::instance().loadFromSettings(); + + std::string config_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings.xml"); + gSavedSettings.loadFromFile(config_filename); + + // See LLAppViewer::init() + LLUI::settings_map_t settings; + settings["config"] = &gSavedSettings; + settings["ignores"] = &gWarningSettings; + settings["floater"] = &gSavedSettings; + settings["account"] = &gSavedPerAccountSettings; + + // Don't use real images as we don't have a GL context + LLUI::initClass(settings, &gTestImageProvider); + + const bool no_register_widgets = false; + LLWidgetReg::initClass( no_register_widgets ); + + // Otherwise we get translation warnings when setting up floaters + // (tooltips for buttons) + std::set<std::string> default_args; + LLTransUtil::parseStrings("strings.xml", default_args); + LLTransUtil::parseLanguageStrings("language_settings.xml"); + LLFontManager::initClass(); + + // Creating widgets apparently requires fonts to be initialized, + // otherwise it crashes. + LLFontGL::initClass(96.f, 1.f, 1.f, + gDirUtilp->getAppRODataDir(), + false ); // don't create gl textures + + LLFloaterView::Params fvparams; + fvparams.name("Floater View"); + fvparams.rect( LLRect(0,480,640,0) ); + fvparams.mouse_opaque(false); + fvparams.follows.flags(FOLLOWS_ALL); + fvparams.tab_stop(false); + gFloaterView = LLUICtrlFactory::create<LLFloaterView> (fvparams); } /*==========================================================================*| static std::string get_xui_dir() { - std::string delim = gDirUtilp->getDirDelimiter(); - return gDirUtilp->getSkinBaseDir() + delim + "default" + delim + "xui" + delim; + std::string delim = gDirUtilp->getDirDelimiter(); + return gDirUtilp->getSkinBaseDir() + delim + "default" + delim + "xui" + delim; } // buildFromFile() no longer supports generate-output-LLXMLNode void export_test_floaters() { - // Convert all test floaters to new XML format - std::string delim = gDirUtilp->getDirDelimiter(); - std::string xui_dir = get_xui_dir() + "en" + delim; - std::string filename; - - LLDirIterator iter(xui_dir, "floater_test_*.xml"); - while (iter.next(filename)) - { - if (filename.find("_new.xml") != std::string::npos) - { - // don't re-export other test floaters - continue; - } - LL_INFOS() << "Converting " << filename << LL_ENDL; - // Build a floater and output new attributes - LLXMLNodePtr output_node = new LLXMLNode(); - LLFloater* floater = new LLFloater(LLSD()); - floater->buildFromFile( filename, - // FALSE, // don't open floater - output_node); - std::string out_filename = gDirUtilp->add(xui_dir, filename); - std::string::size_type extension_pos = out_filename.rfind(".xml"); - out_filename.resize(extension_pos); - out_filename += "_new.xml"; - - LL_INFOS() << "Output: " << out_filename << LL_ENDL; - LLFILE* floater_file = LLFile::fopen(out_filename.c_str(), "w"); - LLXMLNode::writeHeaderToFile(floater_file); - output_node->writeToFile(floater_file); - fclose(floater_file); - } + // Convert all test floaters to new XML format + std::string delim = gDirUtilp->getDirDelimiter(); + std::string xui_dir = get_xui_dir() + "en" + delim; + std::string filename; + + LLDirIterator iter(xui_dir, "floater_test_*.xml"); + while (iter.next(filename)) + { + if (filename.find("_new.xml") != std::string::npos) + { + // don't re-export other test floaters + continue; + } + LL_INFOS() << "Converting " << filename << LL_ENDL; + // Build a floater and output new attributes + LLXMLNodePtr output_node = new LLXMLNode(); + LLFloater* floater = new LLFloater(LLSD()); + floater->buildFromFile( filename, + // FALSE, // don't open floater + output_node); + std::string out_filename = gDirUtilp->add(xui_dir, filename); + std::string::size_type extension_pos = out_filename.rfind(".xml"); + out_filename.resize(extension_pos); + out_filename += "_new.xml"; + + LL_INFOS() << "Output: " << out_filename << LL_ENDL; + LLFILE* floater_file = LLFile::fopen(out_filename.c_str(), "w"); + LLXMLNode::writeHeaderToFile(floater_file); + output_node->writeToFile(floater_file); + fclose(floater_file); + } } |*==========================================================================*/ int main(int argc, char** argv) { - // Must init LLError for llerrs to actually cause errors. - LLError::initForApplication("."); - - init_llui(); - -// export_test_floaters(); - - return 0; + // Must init LLError for llerrs to actually cause errors. + LLError::initForApplication("."); + + init_llui(); + +// export_test_floaters(); + + return 0; } diff --git a/indra/integration_tests/llui_libtest/llui_libtest.h b/indra/integration_tests/llui_libtest/llui_libtest.h index d365ebb5e0..ffa5f82784 100644 --- a/indra/integration_tests/llui_libtest/llui_libtest.h +++ b/indra/integration_tests/llui_libtest/llui_libtest.h @@ -1,24 +1,24 @@ -/** +/** * @file llui_libtest.h * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.cpp b/indra/integration_tests/llui_libtest/llwidgetreg.cpp index cbf6021119..d3d3468185 100644 --- a/indra/integration_tests/llui_libtest/llwidgetreg.cpp +++ b/indra/integration_tests/llui_libtest/llwidgetreg.cpp @@ -1,24 +1,24 @@ -/** +/** * @file llwidgetreg.cpp * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -56,52 +56,52 @@ void LLWidgetReg::initClass(bool register_widgets) { - // Only need to register if the Windows linker has optimized away the - // references to the object files. - if (register_widgets) - { - LLDefaultChildRegistry::Register<LLButton> button("button"); - LLDefaultChildRegistry::Register<LLMenuButton> menu_button("menu_button"); - LLDefaultChildRegistry::Register<LLCheckBoxCtrl> check_box("check_box"); - LLDefaultChildRegistry::Register<LLComboBox> combo_box("combo_box"); - LLDefaultChildRegistry::Register<LLFilterEditor> filter_editor("filter_editor"); - LLDefaultChildRegistry::Register<LLFlyoutButton> flyout_button("flyout_button"); - LLDefaultChildRegistry::Register<LLContainerView> container_view("container_view"); - LLDefaultChildRegistry::Register<LLIconCtrl> icon("icon"); - LLDefaultChildRegistry::Register<LLLoadingIndicator> loading_indicator("loading_indicator"); - LLDefaultChildRegistry::Register<LLLineEditor> line_editor("line_editor"); - LLDefaultChildRegistry::Register<LLMenuItemSeparatorGL> menu_item_separator("menu_item_separator"); - LLDefaultChildRegistry::Register<LLMenuItemCallGL> menu_item_call_gl("menu_item_call"); - LLDefaultChildRegistry::Register<LLMenuItemCheckGL> menu_item_check_gl("menu_item_check"); - LLDefaultChildRegistry::Register<LLMenuGL> menu("menu"); - LLDefaultChildRegistry::Register<LLMenuBarGL> menu_bar("menu_bar"); - LLDefaultChildRegistry::Register<LLContextMenu> context_menu("context_menu"); - LLDefaultChildRegistry::Register<LLMultiSlider> multi_slider_bar("multi_slider_bar"); - LLDefaultChildRegistry::Register<LLMultiSliderCtrl> multi_slider("multi_slider"); - LLDefaultChildRegistry::Register<LLPanel> panel("panel", &LLPanel::fromXML); - LLDefaultChildRegistry::Register<LLLayoutStack> layout_stack("layout_stack"); - LLDefaultChildRegistry::Register<LLProgressBar> progress_bar("progress_bar"); - LLDefaultChildRegistry::Register<LLRadioGroup> radio_group("radio_group"); - LLDefaultChildRegistry::Register<LLSearchEditor> search_editor("search_editor"); - LLDefaultChildRegistry::Register<LLScrollContainer> scroll_container("scroll_container"); - LLDefaultChildRegistry::Register<LLScrollingPanelList> scrolling_panel_list("scrolling_panel_list"); - LLDefaultChildRegistry::Register<LLScrollListCtrl> scroll_list("scroll_list"); - LLDefaultChildRegistry::Register<LLSlider> slider_bar("slider_bar"); - LLDefaultChildRegistry::Register<LLSliderCtrl> slider("slider"); - LLDefaultChildRegistry::Register<LLSpinCtrl> spinner("spinner"); - LLDefaultChildRegistry::Register<LLStatBar> stat_bar("stat_bar"); - //LLDefaultChildRegistry::Register<LLPlaceHolderPanel> placeholder("placeholder"); - LLDefaultChildRegistry::Register<LLTabContainer> tab_container("tab_container"); - LLDefaultChildRegistry::Register<LLTextBox> text("text"); - LLDefaultChildRegistry::Register<LLTimeCtrl> time("time"); - LLDefaultChildRegistry::Register<LLTextEditor> simple_text_editor("simple_text_editor"); - LLDefaultChildRegistry::Register<LLUICtrl> ui_ctrl("ui_ctrl"); - LLDefaultChildRegistry::Register<LLStatView> stat_view("stat_view"); - //LLDefaultChildRegistry::Register<LLUICtrlLocate> locate("locate"); - //LLDefaultChildRegistry::Register<LLUICtrlLocate> pad("pad"); - LLDefaultChildRegistry::Register<LLViewBorder> view_border("view_border"); - } + // Only need to register if the Windows linker has optimized away the + // references to the object files. + if (register_widgets) + { + LLDefaultChildRegistry::Register<LLButton> button("button"); + LLDefaultChildRegistry::Register<LLMenuButton> menu_button("menu_button"); + LLDefaultChildRegistry::Register<LLCheckBoxCtrl> check_box("check_box"); + LLDefaultChildRegistry::Register<LLComboBox> combo_box("combo_box"); + LLDefaultChildRegistry::Register<LLFilterEditor> filter_editor("filter_editor"); + LLDefaultChildRegistry::Register<LLFlyoutButton> flyout_button("flyout_button"); + LLDefaultChildRegistry::Register<LLContainerView> container_view("container_view"); + LLDefaultChildRegistry::Register<LLIconCtrl> icon("icon"); + LLDefaultChildRegistry::Register<LLLoadingIndicator> loading_indicator("loading_indicator"); + LLDefaultChildRegistry::Register<LLLineEditor> line_editor("line_editor"); + LLDefaultChildRegistry::Register<LLMenuItemSeparatorGL> menu_item_separator("menu_item_separator"); + LLDefaultChildRegistry::Register<LLMenuItemCallGL> menu_item_call_gl("menu_item_call"); + LLDefaultChildRegistry::Register<LLMenuItemCheckGL> menu_item_check_gl("menu_item_check"); + LLDefaultChildRegistry::Register<LLMenuGL> menu("menu"); + LLDefaultChildRegistry::Register<LLMenuBarGL> menu_bar("menu_bar"); + LLDefaultChildRegistry::Register<LLContextMenu> context_menu("context_menu"); + LLDefaultChildRegistry::Register<LLMultiSlider> multi_slider_bar("multi_slider_bar"); + LLDefaultChildRegistry::Register<LLMultiSliderCtrl> multi_slider("multi_slider"); + LLDefaultChildRegistry::Register<LLPanel> panel("panel", &LLPanel::fromXML); + LLDefaultChildRegistry::Register<LLLayoutStack> layout_stack("layout_stack"); + LLDefaultChildRegistry::Register<LLProgressBar> progress_bar("progress_bar"); + LLDefaultChildRegistry::Register<LLRadioGroup> radio_group("radio_group"); + LLDefaultChildRegistry::Register<LLSearchEditor> search_editor("search_editor"); + LLDefaultChildRegistry::Register<LLScrollContainer> scroll_container("scroll_container"); + LLDefaultChildRegistry::Register<LLScrollingPanelList> scrolling_panel_list("scrolling_panel_list"); + LLDefaultChildRegistry::Register<LLScrollListCtrl> scroll_list("scroll_list"); + LLDefaultChildRegistry::Register<LLSlider> slider_bar("slider_bar"); + LLDefaultChildRegistry::Register<LLSliderCtrl> slider("slider"); + LLDefaultChildRegistry::Register<LLSpinCtrl> spinner("spinner"); + LLDefaultChildRegistry::Register<LLStatBar> stat_bar("stat_bar"); + //LLDefaultChildRegistry::Register<LLPlaceHolderPanel> placeholder("placeholder"); + LLDefaultChildRegistry::Register<LLTabContainer> tab_container("tab_container"); + LLDefaultChildRegistry::Register<LLTextBox> text("text"); + LLDefaultChildRegistry::Register<LLTimeCtrl> time("time"); + LLDefaultChildRegistry::Register<LLTextEditor> simple_text_editor("simple_text_editor"); + LLDefaultChildRegistry::Register<LLUICtrl> ui_ctrl("ui_ctrl"); + LLDefaultChildRegistry::Register<LLStatView> stat_view("stat_view"); + //LLDefaultChildRegistry::Register<LLUICtrlLocate> locate("locate"); + //LLDefaultChildRegistry::Register<LLUICtrlLocate> pad("pad"); + LLDefaultChildRegistry::Register<LLViewBorder> view_border("view_border"); + } - // *HACK: Usually this is registered as a viewer text editor - LLDefaultChildRegistry::Register<LLTextEditor> text_editor("text_editor"); + // *HACK: Usually this is registered as a viewer text editor + LLDefaultChildRegistry::Register<LLTextEditor> text_editor("text_editor"); } diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.h b/indra/integration_tests/llui_libtest/llwidgetreg.h index 30b915eee2..673214991b 100644 --- a/indra/integration_tests/llui_libtest/llwidgetreg.h +++ b/indra/integration_tests/llui_libtest/llwidgetreg.h @@ -1,24 +1,24 @@ -/** +/** * @file llwidgetreg.h * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * + * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -26,12 +26,12 @@ #define LLWIDGETREG_H // Register all widgets with the builder registry. -// Useful on Windows where linker discards all references to the +// Useful on Windows where linker discards all references to the // static LLDefaultChildRegistry::Register<> calls. class LLWidgetReg { public: - static void initClass(bool register_widgets); + static void initClass(bool register_widgets); }; #endif |