167: def benchmark(*args)
168: msg = args.pop
169: level = args.pop
170: object = nil
171:
172: if args.empty?
173: if respond_to?(level)
174: object = self
175: else
176: object = Puppet
177: end
178: else
179: object = args.pop
180: end
181:
182: raise Puppet::DevError, "Failed to provide level to :benchmark" unless level
183:
184: unless level == :none or object.respond_to? level
185: raise Puppet::DevError, "Benchmarked object does not respond to #{level}"
186: end
187:
188:
189: if level != :none and Puppet::Util::Log.sendlevel?(level)
190: result = nil
191: seconds = Benchmark.realtime {
192: yield
193: }
194: object.send(level, msg + (" in %0.2f seconds" % seconds))
195: return seconds
196: else
197: yield
198: end
199: end