Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "FWCore/Services/interface/PrintLoadingPlugins.h"
00018 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00019 #include "FWCore/PluginManager/interface/PluginManager.h"
00020 #include "FWCore/PluginManager/interface/PluginInfo.h"
00021 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
00022 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00023
00024 #include "boost/bind.hpp"
00025 #include "boost/mem_fn.hpp"
00026 #include "sigc++/signal.h"
00027
00028 #include <algorithm>
00029 #include <iostream>
00030 #include <string>
00031 #include <map>
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 using namespace edmplugin;
00045
00046 PrintLoadingPlugins::PrintLoadingPlugins()
00047 {
00048 PluginManager *pm = PluginManager::get();
00049
00050 pm->askedToLoadCategoryWithPlugin_.connect(boost::bind(boost::mem_fn(&PrintLoadingPlugins::askedToLoad),this, _1,_2));
00051
00052 pm->goingToLoad_.connect(boost::bind(boost::mem_fn(&PrintLoadingPlugins::goingToLoad),this, _1));
00053
00054
00055
00056 }
00057
00058
00059
00060
00061
00062
00063 PrintLoadingPlugins::~PrintLoadingPlugins()
00064 {
00065 }
00066
00067 void PrintLoadingPlugins::fillDescriptions(edm::ConfigurationDescriptions & descriptions) {
00068 edm::ParameterSetDescription desc;
00069 descriptions.add("PrintLoadingPlugins", desc);
00070 descriptions.setComment("This service logs each request to load a plugin.");
00071 }
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089 namespace{
00090 struct PICompare {
00091 bool operator()(const PluginInfo& iLHS,
00092 const PluginInfo& iRHS) const {
00093 return iLHS.name_ < iRHS.name_;
00094 }
00095 };
00096 }
00097
00098 void PrintLoadingPlugins::askedToLoad(const std::string& iCategory,
00099 const std::string& iPlugin)
00100 {
00101 PluginManager *pm = PluginManager::get();
00102
00103 const PluginManager::CategoryToInfos& category = pm->categoryToInfos();
00104
00105 PluginManager::CategoryToInfos::const_iterator itFound = category.find(iCategory);
00106
00107 std::string libname("Not found");
00108
00109 if(itFound != category.end()) {
00110
00111 PluginInfo i;
00112
00113 i.name_ = iPlugin;
00114
00115 typedef std::vector<PluginInfo>::const_iterator PIItr;
00116
00117 std::pair<PIItr,PIItr> range = std::equal_range(itFound->second.begin(),itFound->second.end(),i,PICompare());
00118
00119 if(range.second - range.first > 1){
00120
00121 const boost::filesystem::path& loadable = range.first->loadable_;
00122
00123 libname = loadable.string();
00124
00125 }
00126
00127 edm::LogAbsolute("GetPlugin")<<"Getting> '"<<iCategory<< "' "<<iPlugin
00128 <<"\n from "<<libname <<std::endl;
00129 }
00130
00131 }
00132
00133 void PrintLoadingPlugins::goingToLoad(const boost::filesystem::path& Loadable_)
00134
00135 {
00136 edm::LogAbsolute("LoadLib")<<"Loading> "<<Loadable_.string()<< std::endl;
00137 }
00138
00139
00140
00141
00142
00143
00144
00145
00146