~kdub/mir/mali-client-render-support

774.2.1 by Alexandros Frantzis
shell: Introduce SnapshotStrategy and a threaded implementation
1
/*
2
 * Copyright © 2013 Canonical Ltd.
3
 *
4
 * This program is free software: you can redistribute it and/or modify it
5
 * under the terms of the GNU General Public License version 3,
6
 * as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope that it will be useful,
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 * GNU General Public License for more details.
12
 *
13
 * You should have received a copy of the GNU General Public License
14
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
 *
16
 * Authored By: Alexandros Frantzis <alexandros.frantzis@canonical.com>
17
 */
18
19
#ifndef MIR_SHELL_THREADED_SNAPSHOT_STRATEGY_H_
20
#define MIR_SHELL_THREADED_SNAPSHOT_STRATEGY_H_
21
1062.137.15 by Alan Griffiths
Make private to shell: session_event_sink.h
22
#include "snapshot_strategy.h"
774.2.1 by Alexandros Frantzis
shell: Introduce SnapshotStrategy and a threaded implementation
23
24
#include <memory>
25
#include <thread>
26
#include <functional>
27
28
namespace mir
29
{
30
namespace shell
31
{
32
33
class PixelBuffer;
34
class SnapshottingFunctor;
35
36
class ThreadedSnapshotStrategy : public SnapshotStrategy
37
{
38
public:
39
    ThreadedSnapshotStrategy(std::shared_ptr<PixelBuffer> const& pixels);
40
    ~ThreadedSnapshotStrategy() noexcept;
41
42
    void take_snapshot_of(
43
        std::shared_ptr<SurfaceBufferAccess> const& surface_buffer_access,
44
        SnapshotCallback const& snapshot_taken);
45
46
private:
47
    std::shared_ptr<PixelBuffer> const pixels;
48
    std::unique_ptr<SnapshottingFunctor> functor;
49
    std::thread thread;
50
};
51
52
}
53
}
54
55
#endif /* MIR_SHELL_THREADED_SNAPSHOT_STRATEGY_H_ */