18
18
#include "default_client_buffer_stream_factory.h"
19
19
#include "buffer_stream.h"
20
#include "perf_report.h"
21
#include "logging/perf_report.h"
22
#include "lttng/perf_report.h"
21
24
namespace mcl = mir::client;
22
25
namespace ml = mir::logging;
23
26
namespace mp = mir::protobuf;
25
mcl::DefaultClientBufferStreamFactory::DefaultClientBufferStreamFactory(std::shared_ptr<mcl::ClientBufferFactory> const& client_buffer_factory,
26
std::shared_ptr<mcl::EGLNativeWindowFactory> const& native_window_factory,
31
std::shared_ptr<mcl::PerfReport>
32
make_perf_report(std::shared_ptr<ml::Logger> const& logger)
34
// TODO: It seems strange that this directly uses getenv
35
const char* report_target = getenv("MIR_CLIENT_PERF_REPORT");
36
if (report_target && !strncmp(report_target, "log", strlen(report_target)))
38
return std::make_shared<mcl::logging::PerfReport>(logger);
40
else if (report_target && !strncmp(report_target, "lttng", strlen(report_target)))
42
return std::make_shared<mcl::lttng::PerfReport>();
46
return std::make_shared<mcl::NullPerfReport>();
52
mcl::DefaultClientBufferStreamFactory::DefaultClientBufferStreamFactory(
53
std::shared_ptr<mcl::ClientPlatform> const& client_platform,
27
54
std::shared_ptr<ml::Logger> const& logger)
28
: client_buffer_factory(client_buffer_factory),
29
native_window_factory(native_window_factory),
55
: client_platform(client_platform),
34
60
std::shared_ptr<mcl::ClientBufferStream> mcl::DefaultClientBufferStreamFactory::make_consumer_stream(mp::DisplayServer& server,
35
mp::BufferStream const& protobuf_bs)
61
mp::BufferStream const& protobuf_bs, std::string const& surface_name)
37
return std::make_shared<mcl::BufferStream>(server, mcl::BufferStreamMode::Consumer, client_buffer_factory,
38
native_window_factory, protobuf_bs, logger);
63
return std::make_shared<mcl::BufferStream>(server, mcl::BufferStreamMode::Consumer, client_platform, protobuf_bs, make_perf_report(logger), surface_name);
41
66
std::shared_ptr<mcl::ClientBufferStream> mcl::DefaultClientBufferStreamFactory::make_producer_stream(mp::DisplayServer& server,
42
mp::BufferStream const& protobuf_bs)
44
return std::make_shared<mcl::BufferStream>(server, mcl::BufferStreamMode::Producer, client_buffer_factory,
45
native_window_factory, protobuf_bs, logger);
67
mp::BufferStream const& protobuf_bs, std::string const& surface_name)
69
return std::make_shared<mcl::BufferStream>(server, mcl::BufferStreamMode::Producer, client_platform, protobuf_bs, make_perf_report(logger), surface_name);
73
mcl::ClientBufferStream* mcl::DefaultClientBufferStreamFactory::make_producer_stream(mp::DisplayServer& server,
74
mp::BufferStreamParameters const& params, mir_buffer_stream_callback callback, void* context)
76
return new mcl::BufferStream(server, client_platform, params, make_perf_report(logger), callback, context);